R data.table:j中的匿名函数
我试图让一个匿名函数在R data.table:j中的匿名函数,r,data.table,R,Data.table,我试图让一个匿名函数在data.table的j参数中返回多列。下面是一个例子: ## 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 :=
data.table
的j
参数中返回多列。下面是一个例子:
## 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]
##样本数据
tmpdt在我做了这件事之后就意识到了这个问题。无需列出:
tmpdt[,(function(x) {
model <- lm(c~d,x)
tmpresid <- residuals(model)
tmpvalue <- x$b[as.numeric(names(tmpresid))]
data.frame(tmpvalue,tmpresid)
})(.SD)),
by=a]
tmpdt[,(函数(x){
model您不需要匿名函数-您可以在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]
tmpdt[,{
模特更优雅,谢谢。