错误:找不到函数“%>%”


79

我正在R中运行一个示例,逐步执行这些步骤,到目前为止,一切正常,除了此代码会产生错误:

 words <- dtm %>%
 as.matrix %>%
 colnames %>%
 (function(x) x[nchar(x) < 20])

错误:找不到函数“%>%”

我不知道使用此特殊运算符的好处是什么 %>%,任何反馈都很好。



根据回应,我得到的结果不一致。10次​​失败了8次,但运行正常。
肖恩

Answers:


125

您需要先加载一个定义函数的包(如magrittrdplyr),然后它才能工作。

install.packages("magrittr") # package installations are only needed the first time you use it
install.packages("dplyr")    # alternative installation of the %>%
library(magrittr) # needs to be run every time you start R and want to use %>%
library(dplyr)    # alternatively, this also loads %>%

%>%引入管道运算符是为了“减少开发时间并提高代码的可读性和可维护性”。

但是每个人都必须自己决定是否真的适合他的工作流程并使事情变得容易。有关更多信息 magrittr,请单击此处

不使用管道%>%,此代码将返回与您的代码相同的代码:

words <- colnames(as.matrix(dtm))
words <- words[nchar(words) < 20]
words

编辑:( 由于@Molx做出了非常有用的评论,我正在扩展我的答案)

尽管来自magrittr,管道操作符还是更常用于软件包dplyr(需要并加载magrittr),因此,每当看到有人使用该软件包时,请%>%确保不要加载dplyr


您是否还意味着上面编写的代码可以用不同的方式编写而无需使用%>%
Haidar 2015年

9
尽管来自magrittr,管道操作符还是更常与软件包一起使用dplyr(require和load magrittr),因此,每当您看到有人使用该软件包时,请%>%确保不要加载dplyr
Molx 2015年

1
我想强调指出,仅加载Tidyverse(library(tidyverse))可能不够。之后我添加了(library(dplyr)library(tidyverse),然后%>%被找到。
RikH

15

在Windows上:如果您使用%>%A%dopar%循环里面,你必须添加到负载包的引用dplyr(或者magrittr,其dplyr载荷)。

例:

plots <- foreach(myInput=iterators::iter(plotCount), .packages=c("RODBC", "dplyr")) %dopar%
{
    return(getPlot(myInput))
}

如果您省略了该.packages命令,%do%而是使用它使所有命令都在单个进程中运行,则可以正常工作。原因是它们全部在一个进程中运行,因此不需要专门加载新程序包。


1
这是一个很好的观点,值得针对foreach进行特别强调。过去,我曾遇到过这个问题,与被接受的答案所解决的问题不同。
迈克尔·巴顿

我不确定这是否也是突出显示此内容的合适场所,但是我已经基于简化了foreach循环的iterators包进行了建议和编辑。如果这不合适,请不要理会。
Michael Barton

1
谢谢。救了我。我不知道我需要在中声明依赖项foreach
Jim G.


0

好处是可以使用先前功能的输出。例如,您无需重复数据源的来源。


请将此作为评论。谢谢。
jess
By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.