【问题标题】:Using %>% operator from dplyr without loading dplyr in R使用来自 dplyr 的 %>% 运算符而不在 R 中加载 dplyr
【发布时间】:2015-02-07 19:15:47
【问题描述】:

我目前正在构建一个包,我想知道是否有一种方法可以从 dplyr 调用 %>% 运算符,而无需实际附加 dplyr 包。例如,对于从包中导出的任何函数,您可以使用双冒号 (::) 调用它。所以如果我想使用group_by函数而不附加dplyr,我会输入dplyr::group_by。运营商有类似的东西吗?

【问题讨论】:

  • 我认为 %>% 函数实际上是从 'pkg:magrittr' 导入的。您需要引用或反引号 %>%
  • 你必须使用magrittr::`%>%`

标签: r operators dplyr


【解决方案1】:

在 dplyr 中实现的管道符号和双冒号符号之间似乎存在冲突。我在文档中没有找到任何关于它的内容。

## This works:
base::mean(1:10)

## This doesn't:
1:10 %>% base::mean

## It works after parenthesizing though:
1:10 %>% (base::mean)

它可以在文档中更加突出。 此问题由 romainfrancois 从 tidyverse/dplyr#3958 转移。

来源:https://github.com/tidyverse/magrittr/issues/183

【讨论】:

    【解决方案2】:

    最简单的方法是加载magrittr 包,它只做管道,并且是%>% 的原始来源。如果您不想加载任何包,您仍然可以使用%>%,但不是以任何真正有用的方式(除非您按照 Andrie 的建议在您的环境中定义它)。将它与:: 一起使用会像这样:

    # standard use
    mtcars %>% summary()
    # :: use
    magrittr::"%>%"(mtcars, summary())
    

    你真的失去了使用这种方法的可读性/不嵌套的任何优势。

    既然你说你正在构建一个包,你应该把 magrittr 放在 Imports 中,或者甚至只是我们的 importsFrom 并获取 "%>%" 函数。 See here 了解更多信息。

    【讨论】:

      【解决方案3】:

      如果您安装了“dplyr”但未加载,您可以获得以下结果:

       dplyr::`%>%`   # Note the backticks, although quotes work as well.
      

      这显示了代码,但在底部你会看到它的环境实际上是 'dplyr' 导入的 'magritter' 的 NAMESPACE。正如其他两位知识渊博的受访者所指出的那样,有几种方法可以将它用作函数,尽管它不能仅仅插入在 lhsrhs 参数之间,除非您制作具有侧翼“%”的本地副本's 或用函数括号调用它。 R 解析器不允许:

      >  mtcars dplyr::"%>%" summary()
      Error: unexpected symbol in " mtcars dplyr"
      

      【讨论】:

        【解决方案4】:

        您可以通过用反引号括起来来引用具有非标准名称的任何对象。这意味着您可以这样做:

        `%>%` <- magrittr::`%>%`
        

        这将在您当前的环境中定义%&gt;% 运算符。例如:

        iris %>% head
        
          Sepal.Length Sepal.Width Petal.Length Petal.Width Species
        1          5.1         3.5          1.4         0.2  setosa
        2          4.9         3.0          1.4         0.2  setosa
        3          4.7         3.2          1.3         0.2  setosa
        4          4.6         3.1          1.5         0.2  setosa
        5          5.0         3.6          1.4         0.2  setosa
        6          5.4         3.9          1.7         0.4  setosa
        

        【讨论】:

          猜你喜欢
          • 1970-01-01
          • 2018-10-17
          • 1970-01-01
          • 1970-01-01
          • 2015-11-16
          • 1970-01-01
          • 1970-01-01
          • 2017-06-09
          • 1970-01-01
          相关资源
          最近更新 更多