svyby-您可以在函数的“ by”部分中放置多个项目吗?

问题描述

只需根据先前提出的问题(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>