【问题标题】:svyby- can you put multiple items in the 'by' part of the function?svyby-你能把多个项目放在函数的“by”部分吗?
【发布时间】:2020-09-24 11:27:06
【问题描述】:

只是根据之前提出的问题(Combining lapply, svyby, svyratio to calculate many ratios with confidence intervals)寻找一些建议

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”语句中进行迭代?我尝试了以下方法,但得到了我不想要的交互。

lapply( variables , function( z ) svyby( as.formula( paste0( "~" , z ) ) , by = ~gender + age + location,
                                         design = srs_design,
                                         FUN = svytotal, na.rm = TRUE,
                                         row.names = FALSE))

有没有办法遍历 'by' 语句和 'variable' 语句?

感谢您的帮助!

【问题讨论】:

  • 你想传入两个参数而不是一个?也许定义一个带有输入 y 和 z 的函数 - 您正在使用的函数只需要 z...在您定义一个带有两个参数的函数时,您可以使用 mapply( functionname , var1 , var2 )
  • 你有什么办法可以告诉我那是什么样子的吗?我真的坚持这一点。感谢您的帮助。
  • 变量
  • 用mapply函数是第一个参数,~y需要一个类似的as.formula( paste(

标签: r list loops survey


【解决方案1】:

试试这个

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 包来实现这一点。

【讨论】:

    猜你喜欢
    • 2018-01-13
    • 1970-01-01
    • 1970-01-01
    • 2015-08-13
    • 2019-06-08
    • 2014-08-13
    • 2013-11-25
    • 2015-09-03
    相关资源
    最近更新 更多