【问题标题】:Loop over data table columns and apply glm using for loop循环遍历数据表列并使用 for 循环应用 glm
【发布时间】:2021-06-26 00:42:46
【问题描述】:

我正在尝试遍历我的数据表列并使用 for 循环将 glm 应用于每一列。

for(n in 1:ncol(dt)){
  model = glm(y ~ dt[, n], family=binomial(link="logit"))
}

为什么这不起作用?我收到此错误:

Error in `[.data.table`(dt, , n) : 
  j (the 2nd argument inside [...]) is a single symbol but column name 'n' is not found. Perhaps you intended DT[, ..n]. This difference to data.frame is deliberate and explained in FAQ 1.1. 

我几乎设法使用dt[[n]] 之类的东西使它工作,但我认为它摆脱了列名。

【问题讨论】:

    标签: r for-loop data.table


    【解决方案1】:

    使用lapply 遍历列并使用reformulate 构造公式。

    model_list <- lapply(names(dt), function(x) 
                         glm(reformulate(x, 'y'), dt, family=binomial(link="logit")))
    

    【讨论】:

      【解决方案2】:

      我们可以使用paste 创建一个公式并在glm 中使用它

      model <- vector('list', ncol(dt))
      for(n in 1:ncol(dt)){
           model[[n]] = glm(as.formula(paste0('y ~ ',  names(dt)[n])),
                     data = dt, family=binomial(link="logit"))
           }
      

      【讨论】:

      • 这对我不起作用。我在 eval(predvars, data, env) 中得到一个 `Error: object 'y' not found `
      • @user572780 我想这是你在那里问的类似问题。它适用于as.formula
      猜你喜欢
      • 1970-01-01
      • 2019-09-07
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2022-01-06
      • 2018-05-30
      • 2016-04-14
      • 1970-01-01
      相关资源
      最近更新 更多