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[,{

模特更优雅,谢谢。