2013-04-26 19 views
2

使用data.table,我試圖編寫一個函數,它將數據表,公式對象和字符串作爲參數,並創建並存儲多個模型對象。r在函數內用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。但是,這會使按類型分組的能力無效。函數內的域名(df)包含「X」。我很難過。

+0

我想你的意思'通過= V1'在'ModelsbyV1 < - .. 。' – Arun 2013-04-26 08:42:49

+0

是的。我的錯。謝謝! – mgriebe 2013-04-26 21:44:11

回答

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") 
+0

太棒了,你是冠軍。謝謝! – mgriebe 2013-04-26 21:22:31