Rob*_*ond 11 r data.table
我试图让一个匿名函数在a的j参数中返回多个列data.table.这是一个例子:
## sample data
tmpdt <- data.table(a = c(rep("a", 5), rep("b", 5)),
b = c(rep("f", 3), rep("r", 7)),
c = 1:10,
d = 21:30)
tmpdt[c %in% c(2,4), c := NA]
## this works fine
tmpdt[ , list(testout =
(function(x) {
model <- lm(c ~ d, x)
residuals(model)
})(.SD)),
by = a]
## but I want to return a data.frame from the
## anonymous function
tmpdt[ , list(testout =
(function(x) {
model <- lm(c ~ d, x)
tmpresid <- residuals(model)
tmpvalue <- x$b[as.numeric(names(tmpresid))]
data.frame(tmpvalue, tmpresid)
})(.SD)),
by = a]
Run Code Online (Sandbox Code Playgroud)
第二个版本不起作用,因为该函数返回的是一个data.frame而不仅仅是一个向量.有没有办法在没有在data.table j参数之外编写函数调用的情况下完成这项工作?
edd*_*ddi 14
您不需要匿名函数 - 您可以在{ }(匿名正文)中包含您想要包含的任何表达式j:
tmpdt[, {
model <- lm(c ~ d, .SD)
tmpresid <- residuals(model)
tmpvalue <- b[as.numeric(names(tmpresid))]
list(tmpvalue, tmpresid) # every element of the list becomes a column in result
}
, by = a]
Run Code Online (Sandbox Code Playgroud)
上使用匿名体的一些文件{ }中j:
?data.table:匿名lambda in
j:j接受任何有效的表达式.要记住:结果中的每个元素都list成为一列.
没有传递匿名函数
j.相反,匿名body [{ }]被传递给j[...]一些编程语言称之为lambda.
{ }在j:抑制中间输出与{} | 归档时间: |
|
| 查看次数: |
1183 次 |
| 最近记录: |