在 R Survey 包中将表达式作为参数传递

Pass expression as argument in R Survey package

我有一个关于使用 survey 包在 svycontrast() 函数中调用变量的问题。 我正在尝试针对固定参数自动进行一些对比。我可以做到这一点没问题:

library(survey)    
data(api)

dclus1<-svydesign(id=~dnum, weights=~pw, data=apiclus1, fpc=~fpc)

diff <- svyby(~enroll, by = ~cnum, dclus1, na.rm.all = FALSE, svymean, covmat = T, vartype = "se")

parameter <- 550

svycontrast(diff, quote(`1` - parameter))

#           nlcon SE
# contrast 2.8182  0

然而,我花了好几个小时试图弄清楚如何称呼 rowname `1`,但通过不同的方法,我主要收到以下错误消息:

row <- quote(1)

svycontrast(diff, quote(row - parameter))
Error in row - parameter : non-numeric argument to binary operator

非常感谢任何帮助。

您可以将 substituteas.symbol 结合使用:

row <- 1

substitute(row - parameter, list(row = as.symbol(row)))
# `1` - parameter

svycontrast(diff, substitute(row - parameter, list(row = as.symbol(row))))

#          nlcon SE
#contrast 2.8182  0

我想你可以在这里使用 bquote 而不是 quote

> row <- 1

> svycontrast(diff, bquote(.(as.name(row)) - parameter))
          nlcon SE
contrast 2.8182  0