Я безуспешно пытаюсь создать объект дизайна опроса 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' не найден
Я буду очень признателен за любую помощь.