我当前正在编写一个函数,如果满足条件,我想传递默认参数。如果不满足条件,则不应传递任何参数。我该如何实现? 在这个最小的示例中,我使用ifelse和NULL进行了尝试,但是没有用:
my_function <- function(.data,
.variable = ifelse("var1" %in% names(.data), "var1", NULL)){
...
}
如果“ var1”不是.data的变量名,并且我没有在.variable上传递另一个参数,我想得到一个错误,例如“参数“ .variable”丢失,没有默认值”。我的解决方案有效,但是我收到其他错误消息。
答案 0 :(得分:0)
在条件为ifelse
的情况下,似乎NULL
不喜欢以FALSE
作为响应:
ifelse(2 < 1, 1, NULL)
# Error in ans[!test & ok] <- rep(no, length.out = length(ans))[!test & :
# replacement has length zero
# In addition: Warning message:
# In rep(no, length.out = length(ans)) :
# 'x' is NULL so the result will be NULL
似乎是由于ifelse
返回
具有相同长度和属性(包括尺寸和 “ class”)作为测试值和来自yes或no值的数据值。
和
如果是或否太短,则将其元素回收。
在错误消息中看到rep
和length(NULL)
为零的事实似乎是一个很好的证据。因此,您可能想使用例如
my_function <- function(.data, .variable = if("var1" %in% names(.data)) "var1" else NULL)
is.null(.variable)
my_function("1")
# [1] TRUE
有关其他警告,请参见?ifelse
。
答案 1 :(得分:0)
我建议不要直接在默认参数中执行此操作,而应在函数开始时执行以下操作:
my_function <- function(.data,
.variable = NULL) {
if (is.null(.variable)) {
if ("var1" %in% names(.data)) {
.variable = "var1"
} else {
stop(".variable undefined with no suitable default")
}
}
...
}