我试图弄清楚如何动态地对调查设计对象进行子集化。我已经构建了循环来发送字符串,但不知道如何删除引号,因此 R 将其读取为调用。
我想循环遍历这样的一些(尽管这显然会中断,因为 SUBSET_VARIABLE %in% 4 需要是一个调用而不是一个字符串。:
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)
}
如果可能的话,我想避免在粘贴函数中定义语句,而不是使用eval( parse ( text = statement ) ) )
来执行它。另外,我想避免使用索引,因为我知道子集方法survey.design
对象执行其他任务(参见:getS3method("subset", "survey.design")
)并希望确保动态运行子集与在循环外使用子集函数完全相同。感谢您的任何帮助,您可以提供
Matthew
Use eval
and quote
- 我认为这应该可以让您获得所需的所有灵活性:
for( SUBSET_VARIABLE in c(quote(gear), quote(carb)) ){
design <- subset( design , eval(SUBSET_VARIABLE) %in% 4 )
a <- svymean(~mpg, design)
}
或者如果你想将字符串作为输入,你可以使用get
反而:
for( SUBSET_VARIABLE in c("gear", "carb") ){
design <- subset( design , get(SUBSET_VARIABLE) %in% 4 )
a <- svymean(~mpg, design)
}
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)