正如 Richie 所写,粘贴似乎是最简单的解决方案。这是一个更完整的示例:
myvar <- "AGE"
f <- as.formula(paste("dat ~ contrasts *", myvar, "+ Error(ID/contrasts)"))
x <- summary( aov(f, data=set) )
...而不是set$myvar
你会写
set[[myvar]]
更高级的答案是公式实际上是对“~”运算符的调用。您可以直接修改调用,这在循环内会稍微更有效:
> f <- dat ~ contrasts * PLACEHOLDER + Error(ID/contrasts) # outside loop
> f[[3]][[2]][[3]] <- as.name(myvar) # inside loop
> f # see what it looks like...
dat ~ contrasts * AGE + Error(ID/contrasts)
魔术 [[3]][[2]][[3]] 指定要替换的公式部分。该公式实际上看起来像这样(解析树):
`~`(dat, `+`(`*`(contrasts, PLACEHOLDER), Error(`/`(ID, contrasts))
玩弄索引公式,你会明白:
> f[[3]]
contrasts * AGE + Error(ID/contrasts)
> f[[3]][[2]]
contrasts * AGE
更新:这样做有什么好处?好吧,它更健壮 - 特别是如果您不控制数据的列名。如果myvar <- "AGE GROUP"
当前的粘贴解决方案不起作用。如果myvar <- "file.create('~/OWNED')"
,您有严重的安全风险...