【发布时间】:2018-04-15 15:53:12
【问题描述】:
我正在尝试在 R 的线性模型中将列(或特定向量元素)的名称设置为我的因变量 (DV)。
当我通过键入“ITEM26”手动执行此操作时,没有错误。 DV (y) 是 ITEM26,预测变量是数据框中的所有其他变量。
> lm(ITEM26 ~ ., data = M.compsexitems)
我现在想使用 colnames 函数和数字索引在线性模型中设置 DV,当我引用第一个元素时,它会提供“ITEM26”的输出。 (我的最终目标是设置一个for循环,以便我可以快速将所有列名设置为单独线性模型的DV。)
> colnames(M.compsexitems)[1]
[1] "ITEM26"
但是,当我尝试使用 colnames 函数和数字索引来设置线性模型时,出现错误。
> lm(colnames(M.compsexitems)[1] ~ ., data = M.compsexitems)
Error in model.frame.default(formula = colnames(M.compsexitems)[1] ~ ., :
variable lengths differ (found for 'ITEM26')
如果我手动创建一个包含项目名称(sexitems)的向量,并通过索引引用向量中的特定元素,我会得到同样的错误。
> sexitems
[1] "ITEM26" "ITEM27"
> summary(lm(sexitems[1] ~ ., data = M.compsexitems))$r.squared
Error in model.frame.default(formula = sexitems[1] ~ ., data = M.compsexitems, :
variable lengths differ (found for 'ITEM26')
有谁知道为什么会出现这个错误,或者如何克服这个错误?我感觉 lm 函数没有将索引向量元素视为与数据框中的变量相同,但我不知道为什么。
上述问题成立的虚拟数据帧示例:
> M.compsexitems
ITEM26 ITEM27
1 2 4
2 3 5
提前感谢您的帮助。
【问题讨论】:
-
paste(colnames(M.compsexitems)[1], " ~ .") -
成功了!非常感谢您的快速回复。
-
colnames(M.compsexitems)[1]是一个字符串,而~ .是一个公式表达式。您可以传递字符串或公式,但不能同时传递两者。 -
这让我明白了很多。谢谢!今后我会牢记这一点。
标签: r linearmodels