问题描述
只需根据先前提出的问题(Combining lapply,svyby,svyratio to calculate many ratios with confidence intervals)寻求一些建议
org.axonframework.extensions.reactor.commandhandling.gateway.ReactorCommandGateway.send(new CreateApplicationCommand()).block();
我已经为我的目的稍微调整了代码,但是我想知道是否有一种方法可以创建第二个列表以在“ by”语句中进行迭代?我尝试了以下方法,但得到了我不想要的交互。
variables <- c( "Q_1","Q_2","Q_3" )
lapply( variables,function( z ) svyby( as.formula( paste0( "~",z ) ),by = ~gender,design = srs_design,FUN = svytotal,na.rm = TRUE,row.names = FALSE))
是否有一种方法可以遍历“ by”语句和“ variable”语句?
感谢您的帮助!
解决方法
尝试一下
svybys<-function(formula,bys,design,FUN,...){
tms <- attr(terms(bys),"variables")[-1]
lapply(tms,function(tm){
eval(bquote(svyby(.(formula),by=~.(tm),design=.(design),FUN=.(FUN),...)))
})
}
通过内置的api
示例,我得到了
> svybys(~api00+ell,~stype+sch.wide,dclus1,svymean)
[[1]]
stype api00 ell se.api00 se.ell
E E 648.8681 29.69444 22.36241 1.411617
H H 618.5714 15.00000 38.02025 5.347065
M M 631.4400 22.68000 31.60947 2.952862
[[2]]
sch.wide api00 ell se.api00 se.ell
No No 608.0435 23.000 28.98769 4.005597
Yes Yes 649.3625 28.275 23.42657 1.966037
其中一个棘手的部分是,模型公式是一个单独的子语言,需要使用准引号来代替事物。在这里,我使用了bquote()
,但是您还可以将感叹号和花括号与tidyverse结合使用,以此类推-您需要通过srvyr
软件包进行操作。 / p>