создание объекта R-опроса в другой функции - PullRequest
0 голосов
/ 20 ноября 2018

Я безуспешно пытаюсь создать объект дизайна опроса R (из пакета R survey), используя аргументы, предоставленные в новой функции, которую я создаю.Эта новая функция предназначена для учета сложного плана обследования при вычислении оценок распространенности, полученных как часть функции.Я могу успешно заставить работать новую функцию, если в качестве аргумента в своей функции я предоставлю объект дизайна опроса;Однако я предпочел бы не делать этого, поскольку это усложняет ситуацию.Ниже приведены примерные данные, функция, которую я пытаюсь создать, и мои неудачные попытки создания объекта дизайна опроса в новой функции.В приведенных ниже примерах кадр данных равен n, объект дизайна опроса, который я хочу создать в новой функции, - svyob, переменная веса - wt, переменная id - psu, а переменная страты -stratum.Желаемая структура моей новой функции, наряду со значениями по умолчанию, выглядит следующим образом (обратите внимание, что мой результат будет получен в рамках функции. Но для иллюстрации предположим, что это распределение по полу):

    prev = function(data, wt, psu = 1, stratum = NULL) {
    #Step1: Derive outcome of interest from dataframe (not shown)
    #Step2: Create survey design object  
    svyobj = survey::svydesign(data = n, weights =~ wt[1], id =~ psu[1], strata =~ stratum[1], nest = T)
   #Step 3: Generate summary estimates
    svymean(~outcome, svyobj, svyobj, na.rm = T) 
    }

Данные:

structure(list(wt = 1365.61822580832, psu = 600815, strata = structure(9L, .Label = c("101", 
"102", "103", "104", "111", "112", "113", "114", "201", "203", 
"204", "211", "212", "213", "214"), class = "factor"), age = 1, 
    sex = 1, school = 1), row.names = 50L, class = "data.frame")

* До сих пор мне не удалось предоставить весовую переменную в шаге 2 выше.Я попытался указать переменную веса как weights = "wt", weights = eval (parse (text = "wt")), weights = eval (quote (wt)), weights = wt [1] и т. Д.помогло.Ниже приведены некоторые сообщения об ошибках:

  • weights = as.formula (paste0 ("~", eval (parse (text = "wt")))) # Ошибка в {: задача 1 не выполнена - "(нижний индекс) слишком длинный логический индекс"

    weights = as.formula (paste0 ("~", eval (get (wt)))) # Ошибка в get (wt): object'wt' не найден

Я буду очень признателен за любую помощь.

1 Ответ

0 голосов
/ 21 ноября 2018

Я наконец получил свой код, работающий с обоими из следующих (пошел для # 2):

 #Using (eval(parse())   
     svyobject = svydesign(data=n, id= as.formula(paste0("~", eval(parse(text = "psu")))) , strata=as.formula(paste0("~", eval(parse(text = "stratum")))), weights= as.formula(paste0("~", eval(parse(text = "wt")))), nest=TRUE) 

 #Using (eval(get())   
    svyobject = svydesign(data=n, id= as.formula(paste0("~", eval(get("psu")))) , strata=as.formula(paste0("~", eval(get("stratum")))), weights= as.formula(paste0("~", eval(get("wt")))), nest=TRUE) 
...