在函数调用中用变量替换字符串参数

hli*_*nee 4 interaction r linear-regression

我试图调用一个函数,该函数需要一个字符串作为参数之一.但是,尝试替换包含该字符串的变量会引发错误.

library(jtools)

# Fit linear model
fitiris <- lm(Petal.Length ~ Petal.Width * Species, data = iris)

# Plot interaction effect: works!
interact_plot(fitiris, pred = "Petal.Width", modx = "Species")

# Substitute variable name for string: doesn't work!
predictor <- "Petal.Width"
interact_plot(fitiris, pred = predictor, modx = "Species")

Error in names(modxvals2) <- modx.labels : 
  attempt to set an attribute on NULL
Run Code Online (Sandbox Code Playgroud)

ali*_*ire 5

{jtools}使用非标准评估,因此您可以指定未加引号的列名称,例如

library(jtools)

fitiris <- lm(Petal.Length ~ Petal.Width * Species, data = iris)

interact_plot(fitiris, pred = Petal.Width, modx = Species)
Run Code Online (Sandbox Code Playgroud)

...但它没有得到很好的实施,所以你遇到的(普通!)案例会破坏它.如果你真的需要它来工作,你可以bquote用来重组调用(用.(...)你想要替换的东西),然后运行它eval:

predictor <- "Petal.Width"
eval(bquote(interact_plot(fitiris, pred = .(predictor), modx = "Species")))
Run Code Online (Sandbox Code Playgroud)

...但这是潜水深入R.更好的方法是使用像{ggplot2}这样的普通绘图库自己创建绘图.

  • 或者另一种解决方法是使用`do.call`这样:`do.call("interact_plot",list(fitiris,pred = predictor,modx ="Species")) (2认同)