【发布时间】:2020-07-10 14:21:02
【问题描述】:
我要做什么
我正在尝试编写一个返回数据集某些变量名称的函数。对于一个测试小标题test <- tibble(x1 = 1:3, x2=2:4, x3=3:5, x4=4:6),我想要一个函数
assign_predictors_argument <- function(dataset, outcome, predictors) {
...
}
这样:
- 如果未定义参数
predictors,则predictors将设置为dataset中除outcome之外的所有变量。例如。assign_predictors_argument(test, x1)将返回c(x2, x3, x4)。 - 如果定义了参数
predictors,将返回该值。例如。assign_predictors_argument(test, x1, c(x2, x3))将返回c(x2, x3)。
我的尝试
assign_predictors_argument <- function(dataset, outcome, predictors) {
if(missing(predictors)) {
predictors <- dataset %>%
dplyr::select( -{{ outcome }} ) %>%
names()
}
predictors
}
出了什么问题
案例 1:缺少预测变量参数
assign_predictors_argument(test, x1) 给出结果"x2" "x3" "x4"。但是,我希望它返回 c(x2,x3, x4)。
如何将此字符向量转换为输入的形式?
案例 2:定义的预测变量参数
assign_predictors_argument(test, x1, c(x2, x3)) 给了
Error in assign_predictors_argument(test, x1, x2) :
object 'x2' not found
函数的最后一行似乎试图评估并返回predictors。由于环境中没有定义x3,所以会报错。
我尝试过 a) 将最后一行更改为 {{predictors}} 以及 b) 将 missing(predictors) 更改为 is.null(predictors) 并输入默认的 predictors = NULL(在 this 之后)。两者都没有工作。
如何在不 a) 更改其形式或 b) 对其进行评估的情况下返回 predictors 的值?
【问题讨论】:
-
“我希望它返回 c(x2,x3,x4)”到底是什么意思?您的意思是包含这些变量的数据框吗?你的意思是一个化解的 R 表达式?
标签: r lazy-evaluation evaluation tidyeval