r - 迭代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 的第二个参数运行
解决方案
在 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)
}
推荐阅读
- javascript - mark.js 没有突出显示括号内的单词?
- tensorflow - 在 Apache Ignite 上分发 TensorFlow
- amazon-web-services - 使用对象在 AWS Cognito 用户池中设置地址属性
- c++ - 两个单独的函数中同名的静态变量会冲突吗?
- c# - 在 C# 中保持调用者进程的子进程环境
- swift - 为什么我的 uiCollection 视图单元不会根据不同的屏幕尺寸而改变?我正在使用故事板和 Swift
- mysql - 此 sql 是否命中 MySql 复合索引?
- asp.net - Microsoft.IdentityModel.Tokens.SecurityTokenDescriptor 与 System.IdentityModel.Tokens.Jwt.JwtSecurityToken
- javascript - 使用 useRef 挂钩将副本复制到剪贴板
- python - 为什么它在出队时随机删除节点?