r - 仅在满足条件时才起作用的默认参数
问题描述
我目前正在编写一个函数,如果满足条件,我想传递默认参数。如果不满足条件,则不应传递任何参数。我怎样才能做到这一点?我在这个最小示例中使用 ifelse 和 NULL 进行了尝试,但它不起作用:
my_function <- function(.data,
.variable = ifelse("var1" %in% names(.data), "var1", NULL)){
...
}
如果“var1”不是 .data 的变量名并且我没有在 .variable 上传递另一个参数,我想得到一个错误,例如“缺少参数”.variable”,没有默认值”。我的解决方案有效,但我收到其他错误消息。
解决方案
在条件为的情况下,似乎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
返回的事实
与来自 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
其他警告。
推荐阅读
- c# - 使用 AesManaged ECB 或 CBC 的加密/解密不适用于 .bin 文件
- javascript - Vue 获取发布数据到控制器 asp.net mvc
- c# - RX - 按订阅复杂性划分的多消费者
- angularjs - 允许用户只编辑他自己的文章
- swagger-2.0 - 如何使用 OpenApi Generator 为 java 生成一些模型?
- javascript - Linkedin 返回未捕获的错误:JavaScript API 域仅限于
- r - 一次为数据框中的多列生成线性模型
- jquery - 如果所选日期在 Js 日历中有特定日期,则将所选日期更改为明天
- c# - 为集成测试创建 LocalDB 测试数据库
- sql - 从 Oracle 数据库中的两个表中查询