【发布时间】:2019-03-20 15:41:49
【问题描述】:
我目前正在编写一段代码,如果应用了特定的数据清理标准,该代码将计算一组研究参与者中丢失了多少观察结果。这个具体的例子与确保每项研究的年龄比例平衡有关。在这段代码中,我将测试两个年龄下降标准(比率为 4 和 5)。
鉴于包含每个研究参与者的所有数据的数据表 (cgf.dt) 和要测试的两个年龄下降标准 (age.drop.criteria),我希望我的函数计算每个年龄标准丢失了多少,并将结果数字作为列表输出。
下面是我写的代码:
age.drop.criteria <- c(4, 5)
age_ratio_check <- function(cgf.dt, age.drop.criteria) {
age.dt<-cgf.dt
message("there are ",
age_count<-age.dt[abs(age_ratio-1)>age.drop.criteria] %>%
uniqueN(by=c('nid', 'source', 'admin_1')),
" groups that have unreasonable age ratio. \n see admin 1s below:")
age.dt[abs(age_ratio-1)>age.drop.criteria, paste0(ihme_loc_id, "->",
admin_1) %>% table]
age.dt <- age.dt[!(abs(age_ratio-1)>age.drop.criteria)]
}
lapply(age.drop.criteria, age_ratio_check)
运行此代码后,我收到以下错误:
eval(lhs, parent, parent) 中的错误:找不到对象“age_ratio”
我检查了我的数据表并且存在变量 age_ratio。我想知道是否有人可以帮助我解决此错误并让我的代码正常运行。感谢您花时间阅读我的帖子!
【问题讨论】:
-
lapply(X, FUN, ...)像FUN(X[[1]], ...)一样构建函数,但您似乎想使用第二个参数来获得乐趣。你可以更明确一点:lapply(age.drop.criteria, function(x) age_ratio_check(cgf.dt, x)) -
那是难以阅读的代码,更不用说理解了。我会避免在 data.table
[]调用 tidyverse 管道>%>。 -
@Frank 感谢您的解释。我在我的代码中尝试了这个,但我仍然得到同样的错误。