Я работаю над функцией пост стратификации некоторых данных опроса, и я застреваю в некоторых проблемах с областями видимости.Мои данные находятся в списке, и я не могу понять, как получить доступ и использовать уровни факторной переменной внутри функции.Вне функции «levels (data $ variable $ group)» работает просто отлично.Однако внутри функции все идет к черту.Любая помощь о том, как извлечь уровни для использования в команде пересечения?
Я прошел виньетка «Программирование с dplyr» и попробовал различные методы цитирования / отмены цитирования строки «testdesign $ variable $ sex»на основе примеров в этом уроке.Я либо получаю нулевой результат, либо ошибки.Я знаю, что не совсем понимаю концепцию 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.