如何使用字符作为函数的属性

Man*_*món 4 variables r character

我想对模型的不同变量进行多重比较分析.我的想法如下:

library(multcomp)
set.seed(123)
x1 <- gl(4,10)
x2 <- gl(5,2,40)
y <- rnorm(40)

fm1 <- lm(y ~ x1 + x2)

for(var in c('x1', 'x2'))
{
mc1 <- glht(fm1, linfct=mcp(var='Tukey'))
print(summary(mc1))
}
Run Code Online (Sandbox Code Playgroud)

当我运行时,我收到以下错误: __CODE__由于您限制了布局容器中的增长,内容有大小问题?因此,您的弹出窗口会相应调整大小,但__CODE__例如,您的弹出窗口可能具有固定宽

had*_*ley 13

通常最好避免使用代表代码的字符串 - 它可以防止难以调试的错误,并且在美学上更加优雅.如果你使用do.callsetNames函数,这个问题很容易解决:

var <- "x1"
cmp <- do.call(mcp, setNames(list("Tukey"), var))
glht(fm1, linfct = cmp)
Run Code Online (Sandbox Code Playgroud)

您不能substitute在此使用,因为它不允许您修改函数参数的名称.我有一些直觉,为什么这是合理的,但不足以解释它:/

如果您是软件包作者,最好提供使用不寻常语法的替代版本的函数,以便可以通过编程方式访问它们而无需跳过箍.

  • do.call 的输入是一个命名列表。 (2认同)