我试图弄清楚如何动态地对调查设计对象进行子集化.我已经构造了我的循环来发送字符串,并且不知道如何删除引号,因此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"):),并希望确保动态运行子集完全等同于使用循环中的子集函数.感谢您的任何帮助,您可以提供
马修
我在使用调查包循环变量时遇到问题。假设我将变量子集与调查权重一起收集到数据框中,并且我想进行卡方检验。考虑到多次测试的问题,我仍然想测试所有独特的组合。这在 R 中通常相对简单,这里有一个很好的例子。
不幸的是,这在调查包中变得更加困难,因为项目需要位于设计对象中,而且最重要的是不支持数据集索引(至少据我所知)。我尝试将上面提到的示例改编为 svychisq,但我的所有策略都失败了。
我注意到有人在这里做了类似的事情,但大多数变量都是固定的。任何人都可以创建一个函数(可能类似于这个答案)但使用 svychisq 函数吗?不幸的是,我不知道在线提供的具有大量分类变量和复杂设计的数据集。出于演示目的,我想可以在 data(api) 中使用 dclus1,如函数帮助文件中所示,并尝试循环前 10 个变量
library(survey)
data(api)
dclus1<-svydesign(id=~dnum, weights=~pw, data=apiclus1, fpc=~fpc)
svychisq(~sch.wide+stype, dclus1)
Run Code Online (Sandbox Code Playgroud)
任何帮助将不胜感激。
更新:我真正想做的是避免指定变量名称并给出变量组合的向量。例如
MyChi2tests <- apply( combn(colnames(apiclus1[,c(2,16:17)]),2), 2, function(z) paste(z, collapse = '+'))
Run Code Online (Sandbox Code Playgroud)