如何使用 dplyrif_else()函数使其输出为函数?ifelse()这样做base是微不足道的,但是if_else()出了问题。这是有意的行为还是我只是无法正确地做到这一点?
x <- 2
ifelse(x == 2, min, max)
#> function (..., na.rm = FALSE) .Primitive("min")
dplyr::if_else(x == 2, min, max)
#> Error in true[rep(NA_integer_, length(condition))]: object of type 'builtin' is not subsettable
Run Code Online (Sandbox Code Playgroud)
由reprex 包于 2021 年 12 月 4 日创建(v2.0.0)
你不应该用于ifelse此目的。ifelse和if_else用于向量 - 特别是当您的输入是向量并且输出是相同长度的向量时。您无法创建函数向量,因此ifelse返回函数是一个糟糕的选择。您的代码仅在输入长度为 1 的特殊情况下才有效——这就是控制/流函数的用途if()。
如果长度> 1,您的ifelse代码将失败并出现奇怪的错误,请尝试设置并运行您的代码。xx = 2:3
> x = 2:3
> ifelse(x == 2, min, max)
Error in rep(yes, length.out = len) :
attempt to replicate an object of type 'builtin'
Run Code Online (Sandbox Code Playgroud)
if()另一方面,仍然会检查第一个元素并返回第一个元素的正确结果,同时向您提供有关输入长度的警告:
> if(x == 2) min else max
function (..., na.rm = FALSE) .Primitive("min")
Warning message:
In if (x == 2) min else max :
the condition has length > 1 and only the first element will be used
Run Code Online (Sandbox Code Playgroud)
当您检查长度应始终为 1 的条件时,您应该使用if(){}else{},并且结果实际上可以是任何表达式,可以对其进行赋值,也可以是运行的任意代码。按预期保存向量ifelse(和)。if_else
| 归档时间: |
|
| 查看次数: |
2684 次 |
| 最近记录: |