gpt4 book ai didi

r - 使用具有功能真/假值的 dplyr 的 if_else 函数

转载 作者:行者123 更新时间:2023-12-05 09:03:12 25 4
gpt4 key购买 nike

问题

如何使用 dplyr 的 if_else() 函数使其输出为函数?使用 base 中的 ifelse() 这很简单,但是使用 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

reprex package 创建于 2021-12-04 (v2.0.0)

最佳答案

你不应该为此使用 ifelseifelseif_else 用于向量——特别是当您的输入是一个向量而您的输出是一个相同长度的向量时。您不能创建函数向量,因此 ifelse 不是返回函数的好选择。您的代码仅在输入长度为 1 的特殊情况下有效——这就是控制/流函数 if() 的用途。

如果 x 的长度 > 1,您的 ifelse 代码将失败并出现奇怪的错误,请尝试设置 x = 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'
另一方面,

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

当您检查一个长度应始终为 1 的条件时,您应该使用 if(){}else{},结果可以是任何表达式,它可以被赋值,或者它可以是运行的任意代码。按预期为向量保存 ifelse(和 if_else)。

关于r - 使用具有功能真/假值的 dplyr 的 if_else 函数,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/70226329/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com