我是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的第二个参数运行
答案 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)
}