【问题标题】:Changing the arguments of this function to abstract variables in R将此函数的参数更改为 R 中的抽象变量
【发布时间】:2020-06-15 01:23:19
【问题描述】:

为了使用 for 循环,我试图用变量替换这个函数中的参数:

lm(mpg~cylinders, data=Auto)

所以我这样做了:

var1='cylinders'

lm((paste('mpg ~',var1)), data = Auto)

效果很好。

现在,我想知道如何将参数 cylinders+acceleration 替换为 var1 和 var2。

于是尝试了同样的方法。我试图替换这个:

lm(mpg~cylinders+acceleration, data=Auto)

var1='cylinders'
var2 = 'acceleration'

lm((paste('mpg ~',var1+var2)), data = Auto)

但我收到一条消息错误:

Error in var1 + var2 : non-numeric argument to binary operator

所以我想了解如何使用 var1 和 var2 以便之后使用 for 循环。

【问题讨论】:

  • 做:(paste('mpg ~',var1,"+",var2))。与 python 不同,据我所知,您不能使用+ 直接连接字符串。
  • @NelsonGon 成功了,谢谢。这个其他问题的答案更笼统,这将非常有帮助。再次感谢
  • 发帖时请按照r标签页顶部的说明进行操作。特别是 Auto 不是基础 R 的一部分,并且没有使用库语句,因此代码不可重现。

标签: r


【解决方案1】:

使用reformulate 生成公式。

var1 <- 'cyl'
var2 <- 'disp'
fo <- reformulate(c(var1, var2), "mpg")
lm(fo, mtcars)

或者你可以这样写它给出相同的答案,除了上面在输出中的 Call: 行中按字面意思显示 fo 而下面的代码在输出中的 Call: 行中扩展了 fo。

do.call("lm", list(fo, quote(mtcars)))

给予:

Call:
lm(formula = mpg ~ cyl + disp, data = mtcars)

Coefficients:
(Intercept)          cyl         disp  
   34.66099     -1.58728     -0.02058  

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2020-10-16
    • 1970-01-01
    • 2018-07-13
    • 2016-12-27
    • 2023-03-11
    相关资源
    最近更新 更多