在R中动态地子集测量设计对象

Mat*_*ewR 2 r survey subset

我试图弄清楚如何动态地对调查设计对象进行子集化.我已经构造了我的循环来发送字符串,并且不知道如何删除引号,因此R将其作为调用读取.

我想循环一些这样的(虽然这显然会破坏,因为%4中的SUBSET_VARIABLE%需要是一个调用而不是一个字符串.:

design <- svydesign( ~1 , weight = ~wt , data = mtcars ) 

for( SUBSET_VARIABLE in c("gear","carb") ){

    design <- subset( design ,  SUBSET_VARIABLE %in% 4 )

    a <- svymean(~mpg, design)

}
Run Code Online (Sandbox Code Playgroud)

如果可能的话,我想避免在粘贴函数中定义语句而不是使用eval( parse ( text = statement ) ) )它来执行它.此外,我想避免使用索引,因为我知道survey.design对象的子集方法执行其他任务(请参阅getS3method("subset", "survey.design"):),并希望确保动态运行子集完全等同于使用循环中的子集函数.感谢您的任何帮助,您可以提供

马修

edd*_*ddi 5

使用eval和quote- 我认为应该允许你想要的所有灵活性:

for( SUBSET_VARIABLE in c(quote(gear), quote(carb)) ){
    design <- subset( design ,  eval(SUBSET_VARIABLE) %in% 4 )

    a <- svymean(~mpg, design)
}
Run Code Online (Sandbox Code Playgroud)

或者,如果您想将字符串作为输入,则可以使用get:

for( SUBSET_VARIABLE in c("gear", "carb") ){
    design <- subset( design ,  get(SUBSET_VARIABLE) %in% 4 )

    a <- svymean(~mpg, design)
}
Run Code Online (Sandbox Code Playgroud)