在另一个函数中创建 R 调查设计对象
creating an R survey design object within another function
我正在尝试使用我正在创建的新函数中提供的参数创建 R 调查设计对象(来自 R survey
包),但没有成功。这一新功能试图在计算作为该功能的一部分得出的流行率估计时考虑到复杂的调查设计。如果我在我的函数中提供调查设计对象作为参数,我可以成功地让新函数工作;但是,我宁愿不这样做,因为它会使事情复杂化。下面是示例数据、我尝试创建的函数以及我在新函数中创建调查设计对象的不成功尝试。对于下面的示例,dataframe 是 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 步中提供权重变量一直没有成功。我尝试将权重变量指定为权重 = "wt"、权重 = eval(parse(text = "wt"))、权重 = eval(quote(wt))、权重 = wt[1] 等. 一切都无济于事。一些错误陈述如下:
weights= as.formula(paste0("~", eval(parse(text = "wt")))) # Error in { : task 1 failed - "(subscript) logical subscript too long"
weights= as.formula(paste0("~", eval(get(wt)))) #Error in get(wt) : object 'wt' not found
我将不胜感激任何帮助。
我终于让我的代码与以下两个一起工作(去了#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)
我正在尝试使用我正在创建的新函数中提供的参数创建 R 调查设计对象(来自 R survey
包),但没有成功。这一新功能试图在计算作为该功能的一部分得出的流行率估计时考虑到复杂的调查设计。如果我在我的函数中提供调查设计对象作为参数,我可以成功地让新函数工作;但是,我宁愿不这样做,因为它会使事情复杂化。下面是示例数据、我尝试创建的函数以及我在新函数中创建调查设计对象的不成功尝试。对于下面的示例,dataframe 是 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 步中提供权重变量一直没有成功。我尝试将权重变量指定为权重 = "wt"、权重 = eval(parse(text = "wt"))、权重 = eval(quote(wt))、权重 = wt[1] 等. 一切都无济于事。一些错误陈述如下:
weights= as.formula(paste0("~", eval(parse(text = "wt")))) # Error in { : task 1 failed - "(subscript) logical subscript too long"
weights= as.formula(paste0("~", eval(get(wt)))) #Error in get(wt) : object 'wt' not found
我将不胜感激任何帮助。
我终于让我的代码与以下两个一起工作(去了#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)