作者热门文章
- html - 出于某种原因,IE8 对我的 Sass 文件中继承的 html5 CSS 不友好?
- JMeter 在响应断言中使用 span 标签的问题
- html - 在 :hover and :active? 上具有不同效果的 CSS 动画
- html - 相对于居中的 html 内容固定的 CSS 重复背景?
dplyr
具有矢量化条件 if_else
和 case_when
.
然而,这两者都急切地评估它们可能的输出( true/false
表示 if_else
,case_when
的公式的 RHS ):
suppressPackageStartupMessages({
library(dplyr)
})
if_else(c(T, T, T), print(1), print(2))
#> [1] 1
#> [1] 2
#> [1] 1 1 1
case_when(
c(T, T, T) ~ print(1),
c(F, F, F) ~ print(2)
)
#> [1] 1
#> [1] 2
#> [1] 1 1 1
false
即使从未使用过案例,也会对其进行评估。我正在寻找一种方法来避免这种情况,因为我的
base::ifelse
:
ifelse(c(T, T, T), print(1), print(2))
#> [1] 1
#> [1] 1 1 1
base::ifelse
众所周知,效率低下,因此更好的替代方案会很好。话虽如此,我对
case_when
的替代品特别感兴趣。 ,当我需要使用
ifelse
链时,我经常使用它。 s。
data.table::fifelse
,但它遇到了同样的问题:
suppressPackageStartupMessages({
library(data.table)
})
fifelse(c(T, T, T), print(1), print(2))
#> [1] 1
#> [1] 2
#> [1] 1 1 1
if_else
是否有替代方案?和
case_when
哪个不急切地评估其未使用的案例?
最佳答案
如果安装了data.table
的开发版您可以从 GitHub 使用 fcase
类似于 dplyr::case_when
但是懒惰的评估:
data.table::fcase(c(TRUE, TRUE, TRUE), print(1L), c(FALSE, FALSE, FALSE), print(2L))
[1] 1
[1] 1 1 1
关于r - 不急切评估其潜在输出的矢量化 if_else 或 case_when ?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/60079566/
我是一名优秀的程序员,十分优秀!