是否有一个函数可以执行以下操作?
library(dplyr)
cond = T
if (cond) {
print('Hello')
}
# [1] "Hello"
# How can I achieve the same as above with a pipe ?
print('Hello') %>% function_if(cond)
purrr::when
和ifelse
功能在这里似乎不起作用。
诚然,我看不出这有什么用处……但是
function_if <- function(data, expr) if (isTRUE(expr)) force(data)
cond <- TRUE
print('Hello') %>%
function_if(cond)
# [1] "Hello"
print('Hello') %>%
function_if(cond) %>%
class()
# [1] "Hello" # <-- action of 'print'
# [1] "character" # <-- output from 'class', to show that
print('Hello') %>% # <-- this never happens here
function_if(FALSE) %>%
class()
# [1] "NULL" # <-- output from 'class', no 'print' output
坦白说,我不知道我会用这个。
它的工作方式:
data
(可以是任何对象)在这里被延迟定义。这里的执行顺序是:%>%
,function_if
,只有当isTRUE(expr)
时,才强制评估data
。如果为 true,则评估并返回 data
;如果不是 true,则 function_if
不会强制数据,因此它的惰性存在永远不会被实例化,并且 NULL
会隐式返回。
也许 this 函数的更好名称是
stoppipe_if_not
,这意味着如果 data.frame
ition 不精确 cond
,管道中的所有数据流(无论是
TRUE
还是其他任何东西)都不会被传递。.