R svyby-您可以在';由';功能的一部分?
只是根据之前提出的问题寻求一些建议() 有没有一种方法可以遍历“by”语句和“variable”语句 谢谢你的帮助 试试这个R svyby-您可以在';由';功能的一部分?,r,list,loops,survey,R,List,Loops,Survey,只是根据之前提出的问题寻求一些建议() 有没有一种方法可以遍历“by”语句和“variable”语句 谢谢你的帮助 试试这个 svybys<-function(formula, bys, design, FUN, ...){ tms <- attr(terms(bys),"variables")[-1] lapply(tms, function(tm){ eval(bquote(svyby(.(formula),
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), ...)))
})
}
这其中棘手的部分是,模型公式是一个单独的子语言,需要准旋转来替换东西。在这里,我使用了
bquote()
,但您也可以在tidyverse中使用感叹号和大括号等的组合——您需要通过srvyr
包来实现这一点。是否要传入两个参数而不是一个参数?也许定义一个输入为y
和z
的函数-您正在使用的函数只接受z
…当您定义一个带有两个参数的函数时,您可以使用mapply(functionname,var1,var2)
有什么方法可以告诉我它是什么样子的吗?我真的被这件事缠住了。感谢您提供的帮助。mapply的变量
函数是第一个参数,~y
需要一个与.formula类似的as.formula(粘贴(
lapply( variables , function( z ) svyby( as.formula( paste0( "~" , z ) ) , by = ~gender + age + location,
design = srs_design,
FUN = svytotal, na.rm = TRUE,
row.names = FALSE))
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), ...)))
})
}
> 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