在R中的列表上迭代

在R中的列表上迭代,r,formula,lm,R,Formula,Lm,我是新手,我有点困惑 我试图获取CSV的列名,然后对它们进行迭代,并将它们用作线性模型函数中的键 我在尝试这样做时遇到了一些错误,例如: columns <- as.list(VBPersonasMulti[0,2:length(VBPersonasMulti)]) columns在lm()函数中使用formula()来使用以字符串形式编写的公式。不要麻烦使用列表。例如: VBPersonasMulti = data.frame(open = rnorm(100, 3, 2), at

我是新手,我有点困惑

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

我在尝试这样做时遇到了一些错误,例如:

columns <- as.list(VBPersonasMulti[0,2:length(VBPersonasMulti)])
columns在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)
}
VBPersonasMulti=data.frame(open=rnorm(100,3,2),
尝试=rnorm(100,1,2),
已完成=rnorm(100,-1,3))

colnames为什么您觉得需要使用列表?还有一个问题是,您的名称是字符串,但您希望它们作为变量。。。因此,一种方法是使用paste0()构建公式,然后使用as.formula()使其在lm中可用。你的主要误解是,
lm
的第一个参数是一个公式。这些是R中的特殊对象,通常是由作为列名而不是数据列本身的裸符号创建的。如果列名是字符,那就不同了,您需要使用
paste()
as.formula()
构造一个公式。例如,公式可能是
variable1~variable2
,但是如果我们有
x作为旁注,则创建一个带有
list()的列表
通常在其中的对象可能是不同类型、字符混合、数字或更复杂的对象(如其他列表)时最有用。如果你收集的东西都是相同的原子类型,比如字符串,只需使用
c()
。你的问题不是“在列表上迭代”,这是一个问题。它是“从指定变量构造公式”。您甚至不需要使用变量名,您可以使用dataframe/matrix的列。因此,这是现有问题的重复。
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)
}
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)
}