在R中的列表上迭代
我是新手,我有点困惑 我试图获取CSV的列名,然后对它们进行迭代,并将它们用作线性模型函数中的键 我在尝试这样做时遇到了一些错误,例如:在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
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)
}