r在函数内部使用data.table在子集上创建模型

时间:2013-04-26 08:40:22

标签: r data.table

使用data.table,我正在尝试编写一个函数,该函数将数据表,公式对象和字符串作为参数,并创建和存储多个模型对象。

myData <- data.table(c("A","A","A","B","B","B"),c(1,2,1,4,5,5),c(1,1,2,5,6,4))
## This works.
ModelsbyV1 <- myData[,list(model=list(lm(V2~V3)),by=V1)]

##This does not.
SectRegress <- function (df,eq,sectors) {
  Output <- df[,list(model=list(lm(eq))),
             by=sectors]
  return(Output)
}

Test <- SectRegress(myData,formula(V2~V3),sectors="V1")
##Error in eval(expr, envir, enclos) : object 'X' not found

我尝试过在函数中使用df。但是,这会使按类型分组的能力无效。函数内的colnames(df)包括“X”。我很难过。

1 个答案:

答案 0 :(得分:2)

您必须在环境.SD内对其进行评估(因为lm无法“看到”V2和V3否则):

SectRegress <- function (df,eq,sectors) {
    Output <- df[, list(model=list(lm(eq, .SD))), by=sectors]
    return(Output)
}
Test <- SectRegress(myData,formula(V2~V3),sectors="V1")