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

标签 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”。我很困惑。

最佳答案

您必须在环境 .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")

关于r 使用函数内的 data.table 在子集上创建模型,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/16232138/

相关文章:

r - 对空白缺失值使用不同长度的 data.table 的 fread

r - R如何识别最后一次出现的距离

r - 如何减少 selectinput 中标签和选项之间的空间?

r - 从函数返回的警告 : 'Invalid .internal.selfref detected' when adding a column to a data. 表

r - ggplot 中对数刻度的漂亮轴标签

将 NA 替换为 R 中相邻列中的值

r - 使用 data.table 和 RJSONIO/jsonlite - 结果被转置

reshape 会抛出 data.table 错误,但不会抛出 data.frame 错误

r - 跨多个列的 Pivot_wider

r - 带有 revealjs r markdown 演示文稿的 ggplotly 工具提示