【问题标题】:Indexing inside of lm() Rlm() R 内部的索引
【发布时间】:2021-08-07 18:29:51
【问题描述】:

我正在编写一个 for 循环,它针对因变量“Score”为数据框中的每个单独的回归量返回 jtoolseffect_plots。

此代码使用回归器 data$Fab 返回单次迭代的正确结果:

model <- lm(Score~Fab, data=data)
effect_plot(model, pred = Fab, data=data)

这是我为了遍历data 的所有列而尝试的:

for (i in colnames(data)){
model <- lm(Score~i, data=data)
effect_plot(model, pred = i, data=data)
}

这会返回“可变长度不同”错误,这在我的单回归器尝试中不存在。我尝试过使用data[[i]] 代替i 和noquote(i) 代替i,这两种方法都不起作用。任何有关如何在 for 循环中正确引用我的数据框列或更有效方法的建议,都非常感谢!

【问题讨论】:

    标签: r for-loop ggplot2


    【解决方案1】:

    在lm 中使用paste 或reformulate 创建公式,并使用!! 按照?effect_plot 传递对象

    pred - 交互中涉及的预测变量的名称。这可以是一个简单的名称或字符串。请注意,它是使用 rlang 评估的,因此程序员可以使用 !!传递变量而不是逐字名称的语法。

    for (i in colnames(data)){
       model <- lm(reformulate(i, response = "Score'), data=data)
       # // or using paste
       # model <- lm(as.formula(paste0('Score~', i)), date = data)
       jtools::effect_plot(model, pred = !!i, data=data)
    }
    

    编辑:来自 OP 的 cmets 关于effect_plot

    【讨论】:

    • 谢谢!这适用于 lm(),似乎它仍然遇到 effect_plot() 的问题,它试图将字母“i”作为预测变量传递,而不是任何列名“i”代表。编辑——看起来 effect_plot() 需要 "!!i" 才能将其用作变量。
    • @Scoops 你是对的。我正在检查文档
    猜你喜欢
    • 2012-03-20
    • 1970-01-01
    • 2013-06-07
    • 2012-06-11
    • 1970-01-01
    • 1970-01-01
    • 2015-06-24
    • 2014-04-17
    • 2019-07-29
    相关资源
    最近更新 更多