r - Dplyr 管道 - 如果是这样,继续,否则结束
问题描述
是否有一种可接受的方式来构建类似于以下内容的 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
推荐阅读
- javascript - 跨域 XSS
- actions-on-google - 无法使用 Actions on Google 为 BasicCard 设置白色边框
- angularjs - 在AngularJS中一个接一个地调用一个异步方法
- php - 在 PHP 中将多个数组中的值存储到一个数组中
- javascript - 如何将按钮添加到 v-calendar | Vue.js?
- tensorflow - GAN 的全局步骤
- php - 查找两个不同表上的两个不同查询获得的不匹配结果
- qt - 如何使 Rectangle 表现得像 qml 中的滚动条
- reactjs - 获取该地点的天气数据并设置在 flatlist 中
- php - 如何检查我的 postgresql 函数是否正在运行?