Уровни доступа к переменной списка в пользовательской функции - PullRequest
1 голос
/ 06 мая 2019

Я работаю над функцией пост стратификации некоторых данных опроса, и я застреваю в некоторых проблемах с областями видимости.Мои данные находятся в списке, и я не могу понять, как получить доступ и использовать уровни факторной переменной внутри функции.Вне функции «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.
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...