【问题标题】:Pass expression as argument in R Survey package在 R Survey 包中传递表达式作为参数
【发布时间】:2021-08-21 00:54:00
【问题描述】:

我有一个关于使用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

非常感谢任何帮助。

【问题讨论】:

  • 我修改了标题以吸引更多关注 ;-)

标签: r survey


【解决方案1】:

您可以将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

【讨论】:

  • 在你和@ThomasisCoding 之间选择一个正确的答案真的很困难,因为两者都使用非常相似的功能。我只是选择了更简洁的一个。
  • 也支持@ThomasIsCoding:让我有机会发现bquote
  • 你的回答也很好,已经投票了:)
【解决方案2】:

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

> row <- 1

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

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2015-06-09
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2013-03-28
    • 1970-01-01
    相关资源
    最近更新 更多