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

147

我正在R中运行一个示例,按照步骤进行,到目前为止一切都正常,除了这段代码会产生一个错误:

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

错误:无法找到函数“%>%”

我不明白使用这个特殊运算符%>% 的好处是什么,希望能得到反馈。


相关:https://dev59.com/114d5IYBdhLWcg3wJfpm - LJW
根据响应,我得到了不一致的结果。它在10次中失败了8次,但是之后又正常运行。 - Shawn
5个回答

210
你需要加载一个包(例如magrittrdplyr),它会定义该函数,然后它应该可以正常工作。

你需要加载一个包(例如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 包,但管道操作符更常与需要并加载 magrittr 的包 dplyr 一起使用, 因此每当您看到有人使用 %>% 时,请确保您是否应该加载 dplyr


你的意思是上面写的代码可以用不需要使用%>%的不同方式来编写吗? - Haidar
11
尽管magrittr中有管道运算符,但它更常用于需要加载magrittrdplyr包中。因此,每当你看到有人使用%>%时,确保你是否应该加载dplyr - Molx
2
我想强调仅加载Tidyverse (library(tidyverse)) 可能不足够。我在 library(tidyverse) 后添加了 (library(dplyr)),然后发现了 %>% - RikH
3
好嫉妒这个帖子得到了171个赞。声望分数真是疯狂。 - alejandro_hagan

19

在Windows系统中:如果你在 %dopar% 循环内使用了 %>% ,你需要添加一个引用来加载 dplyr 包(或者 dplyr 自带的包 magrittr)。

示例:

plots <- foreach(myInput=iterators::iter(plotCount), .packages=c("RODBC", "dplyr")) %dopar%
{
    return(getPlot(myInput))
}
如果您省略`.packages`命令,并使用`%do%`代替以使其在一个单独的进程中运行,则可以正常工作。原因是所有操作都在一个进程中运行,因此不需要专门加载新包。

1
这是一个很好的观点,值得特别强调关于foreach。我过去曾经遇到过这个问题,它与被接受的答案解决的问题不同。 - Michael Barton
我不确定是否这是正确的场合提出此事,但我已经根据迭代器包建议一个编辑,可以简化foreach循环。如果此举不妥,请忽略我的建议。 - Michael Barton
1
谢谢。你救了我。我不知道我需要在“foreach”中声明依赖项。 - Jim G.

6

在基础R中没有pipe操作符。您需要加载以下任何一个包才能使用它:dplyrtidyversemagrittr


4

你需要按照以下方式安装magrittr

install.packages("magrittr")

然后,在你的脚本中,不要忘记在顶部添加

library(magrittr)

关于运算符%>% 的含义,您可能想考虑一下这个问题R中%>%函数的含义是什么?

请注意,相同的运算符也适用于库dplyr,因为它从magrittr导入。

dplyr曾经有一个类似的运算符(%.%),现在已被弃用。在这里,我们可以阅读有关%.%(来自库dplyr的弃用运算符)和%>% (来自magrittr的运算符,也可在dplyr中使用)之间差异的说明。


0

如果有人碰巧看到这个想要计算矩阵幂的问题,请安装这个库(仅使用 dplyr 不正确)

library(expm)

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接