用户定义函数中列表变量的访问级别

时间:2019-05-05 22:54:36

标签: r tidyverse

我正在使用一个功能来对一些调查数据进行后分层,但是我在某些范围界定问题上陷入了困境。我的数据在列表中,我无法弄清楚如何访问和使用函数中的因子变量级别。在函数之外,“ levels(data $ variables $ group)”可以正常工作。但是,在函数内部,一切都会陷入困境。有关如何提取要在crossing命令中使用的级别的任何帮助?

我已经看过“用dplyr编程”小插图,并尝试根据该教程中的示例使用多种方法来引用/取消引用字符串“ testdesign $ variables $ sex”。我得到的结果为NULL或错误。 我知道我没有正确理解quosure概念,但是我已经成功完成了其他未在列表上运行的功能。

library(srvyr)
library(survey)
library(tidyverse)

test <- data.frame(
  age3group = sample(letters[1:3], 30, replace = T),
  sex = sample(c("Male", "Female"), 15, replace=T),
  seqno = sample(1:30),
  denst = sample(c("Strata1", "Strata2", "Strata3"), replace=T),
  wts = runif(30, 1.0, 5.0)
)

testdesign<- test %>% 
  as_survey_design(ids=seqno, strata=denst, nest=T, weights=wts, probs=NULL)


popage<-c(10.48, 13.48, 9.68)


#2. Make a function that takes a svydesign object and postStratifies it
stratPost <- function(design, agegrp=age3grp, agepop=popage, group){
  quo_group <-enquo(group)
  quo_age <- enquo(agegrp)
  quo_design <- enquo(design)

  #create formulas to reference the group and age variables
  my_formula1<-as.formula(paste0("~", quo_name(quo_group)))
  my_formula2<-as.formula(paste0("~", quo_name(quo_age)))

  #create table of frequencies of grouping variable
  grptable<-as.data.frame(svytable(my_formula1, design))

  groupformula<-paste0(quo_name(quo_design), "$", "variables", "$", quo_name(quo_group))
  #groupform<-enquo(groupform)
  lev <- enquo(groupformula)
  grouplevels<-levels(!! lev)
  print(grouplevels)
}
stratPost(design=testdesign, group=sex)

在此功能中,我还尝试过:

grouplevels<-levels(as.name(groupformula))
grouplevels<-levels(quo_name(groupformula))
etc.

0 个答案:

没有答案