R语言中如何将字符串变量传入multcomp::glht函数进行多重比较
解决动态变量名传递给
multcomp::glht的mcp参数问题 这个问题的核心是**mcp()函数需要的是命名参数,当你直接写mcp(var='Dunnet')时,R会把var当成变量名本身,而不是它存储的'cyl'值**,所以模型里找不到名为var的变量,就触发了报错。
下面给你两种可行的解决办法:
方法一:用do.call()动态构建mcp参数
这是最直观且可靠的方式,我们先把参数构建成一个列表,再用do.call()把列表传递给mcp():
library(multcomp) # 你的初始代码 var <- 'cyl' mtcars$cyl <- as.factor(mtcars$cyl) aov <- aov(as.formula(paste('mpg~', var)), data=mtcars) # 构建mcp的参数列表:键是var的值,值是事后检验方法 mcp_params <- setNames(list('Dunnet'), var) # 用do.call调用glht,动态传递参数 summary(glht(aov, linfct = do.call(mcp, mcp_params)))
方法二:用eval()结合表达式构造
如果你更喜欢用表达式求值的方式,也可以这样写:
# 构造一个表达式,把var的值替换进去 mcp_expr <- bquote(mcp(.(as.name(var)) = 'Dunnet')) # 求值后传递给glht summary(glht(aov, linfct = eval(mcp_expr)))
这两种方法都能让R正确识别你要指定的因子是cyl(也就是var存储的值),而不是var这个变量名本身,就能顺利执行Dunnett事后检验了。
内容的提问来源于stack exchange,提问作者zesla
相关产品推荐
相关产品推荐

