我希望从一个
举个简单的例子,如果我想要得到
data.frame
的列上返回多个结果,并将这些新列与其他简单计算一起添加到同一个 data.frame
中。举个简单的例子,如果我想要得到
sin
函数的积分值和绝对误差,以及积分区间的中点:df <- data.frame(Lower = c(1,2,3), Upper = c(2,3,4))
setDT(df)
getIntegral <- function(l, u) {
n <- integrate(sin, mean(l), mean(u))
list(Value=n$value, Error=n$abs.error)
}
df[,
c('Value', 'Error', 'Mid') := {
n <- getIntegral(Lower, Upper)
list(n$Value,
n$Error,
(Lower+Upper)/2)
}]
df
Lower Upper Value Error Mid
1: 1 2 0.5738457 6.370967e-15 1.5
2: 2 3 0.5738457 6.370967e-15 2.5
3: 3 4 0.5738457 6.370967e-15 3.5
我不太喜欢我的方法,因为将新列的名称与分配给它们的值分开使得阅读起来很困难。有什么更好的方法可以完成这个任务吗?这是一个长数据处理链的一部分,所以我不想在外部创建临时变量,所以我希望使用 data.table
或 dplyr
单独提供解决方案。
setDT(df)[,":="(Value=getIntegral(Lower,Upper)$Value, Error=getIntegral(Lower,Upper)$Error, Mid =(Lower+Upper)/2)]
- jlhowardsetDT(df)[,c("Value","Rrror","Mid"):= with(getIntegral(Lower,Upper),list(Value,Error,(Lower+Upper)/2))]
- jlhowardsetDT(df)[,":="(Value=getIntegral(Lower,Upper)$Value, Error=getIntegral(Lower,Upper)$Error, Mid =(Lower+Upper)/2)]
的东西,但我不想运行两次getIntegral
。 - user3684014setDT(df)[,getIntegral(Lower,Upper),by=list(Lower,Upper)]
。 - jlhoward