遍历R中的列表

时间:2019-02-02 00:26:47

标签: r formula lm

我是R的新手,有点困惑!

我试图获取CSV的列名,然后对其进行迭代,并将其用作线性模型函数中的键。

尝试通过像这样获取列名来获取错误:

columns <- as.list(VBPersonasMulti[0,2:length(VBPersonasMulti)])

然后在ml函数中将它们作为键引用

for (i in seq_along(column)) {
    anal <- lm(open ~ unlist(column[i]), data = VBPersonasMulti)
}

我尝试了不带unlist和其他几个功能,也没有column [[i]]) 上述方法的解决方案将是理想的,但我也遇到了这种迭代的动态版本较弱的问题

这将创建一个我确实想从csv(或重新分配该列)中迭代的列名称的固定列表:

colnames <- list('attempted','open', 'completed', 'attempted', 'earned', 'commented', 'X7'
               , 'logout', 'join', 'leave', 'flag_as_inaproppriate')
for (i in seq_along(colnames)) {
  print(colnames[i])
  anal <- lm(open ~ unlist(colnames[i]), data = VBPersonasMulti)
  plot(anal)
}

但是当代码尝试使用列表成员作为其lm函数中的键时,出现此错误:

  

model.frame.default(formula = open〜unlist(colname [i]))中的错误,   数据= VBPersonasMulti,:         可变长度有所不同(可找到“ unlist(colname [i])”))

如果我尝试使用colname [i]或colname [[i]]访问列名,则会出现错误:

  

变量“ colname [i]”的无效类型(列表)

很抱歉出现新手问题,如果我一直无法准确地描述问题。

我想发生的是,对于每个列名,lm函数将使用列名作为lm的第二个参数运行

1 个答案:

答案 0 :(得分:1)

在lm()函数内使用Formula()来使用以字符串形式编写的公式。并且不要打扰使用列表。例如:

VBPersonasMulti = data.frame(open = rnorm(100, 3, 2),
  attempted = rnorm(100,1,2),
  completed = rnorm(100,-1,3))

colnames <- c('attempted','completed')

for (colname in colnames) {
  print(colname)
  anal <- lm(formula(paste('open ~' , colname)), data = VBPersonasMulti)
  plot(anal)
}