首页 > 解决方案 > 迭代R中的列表

问题描述

我是 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]), data = VBPersonasMulti, 中的错误:可变长度不同(为 'unlist(colname[i])' 找到)

如果我尝试使用 colname[i] 或 colname[[i]] 访问列名,则会收到错误消息:

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

对不起新手问题,如果我一直在努力准确地描述问题。

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

标签: rformulalm

解决方案


在 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)
}

推荐阅读