【发布时间】:2021-03-01 21:00:15
【问题描述】:
是否有一种可接受的方式来构建类似于以下的 dplyr 管道:
data %>% {if(!is.null(data)) %>% else STOP} %>% ... %>% ...
如果data 不为空,我希望管道继续,否则我不希望进一步的管道完成。
【问题讨论】:
是否有一种可接受的方式来构建类似于以下的 dplyr 管道:
data %>% {if(!is.null(data)) %>% else STOP} %>% ... %>% ...
如果data 不为空,我希望管道继续,否则我不希望进一步的管道完成。
【问题讨论】:
当然可以。
如果我们假设如果不满足某个条件(例如
NULL %>%
mutate(cyl2 = cyl+2)
# Error in UseMethod("mutate") :
# no applicable method for 'mutate' applied to an object of class "NULL"
然后我们可以插入
NULL %>%
{ stopifnot(!is.null(.)); .; } %>%
mutate(cyl2 = cyl+2)
# Error in stopifnot(!is.null(.)) : !is.null(.) is not TRUE
# x
(注意我们没有得到关于'mutate' applied to an object of class "NULL" 的失败。)事实上,如果你想获得一点的幻想,你可以使用R-4 的新命名stopifnot 条件:
NULL %>%
{ stopifnot("data is null!" = !is.null(.)); .; } %>%
mutate(cyl2 = cyl+2)
# Error in stopifnot(`data is null!` = !is.null(.)) : data is null!
它可以(不干扰)真实数据:
mtcars[1:2,] %>%
{ stopifnot(!is.null(.)); .; } %>%
mutate(cyl2 = cyl+2)
# mpg cyl disp hp drat wt qsec vs am gear carb cyl2
# Mazda RX4 21 6 160 110 3.9 2.62 16.5 0 1 4 4 8
# Mazda RX4 Wag 21 6 160 110 3.9 2.88 17.0 0 1 4 4 8
【讨论】: