【问题标题】:Dplyr pipe - If this, continue, else endDplyr 管道 - 如果是这样,继续,否则结束
【发布时间】:2021-03-01 21:00:15
【问题描述】:

是否有一种可接受的方式来构建类似于以下的 dplyr 管道:

data %>% {if(!is.null(data)) %>% else STOP} %>% ... %>% ...

如果data 不为空,我希望管道继续,否则我不希望进一步的管道完成。

【问题讨论】:

    标签: r dplyr


    【解决方案1】:

    当然可以。

    如果我们假设如果不满足某个条件(例如

    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
    

    【讨论】:

      猜你喜欢
      • 2016-11-16
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2020-12-31
      • 2014-09-20
      • 1970-01-01
      相关资源
      最近更新 更多