2015-05-14 215 views
17

我運行中的R爲例,通過步驟去和一切工作,到目前爲止,除了此代碼產生一個錯誤:錯誤:無法找到函數「%>%」

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

Error: could not find function "%>%"

我不明白使用這個特殊運營商的好處是什麼,並且任何反饋都會很好。

+0

相關:http://stackoverflow.com/questions/27125672/what-does-function-mean-in-r – LJW

回答

35

您需要首先安裝包magrittr,然後它應該工作。

install.packages("magrittr") 
library(magrittr) 

運營商%>%被介紹給管「縮短開發時間,並提高可讀性和代碼的可維護性。」

但是每個人都必須自己決定它是否真的適合他的工作流程並讓事情更輕鬆。 欲瞭解更多有關magrittr的信息,請點擊here

不使用管道%>%,該代碼將返回相同的代碼:

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

編輯: (我伸出,因爲一個非常有用的評論我的回答那是由@Molx製作的)

Despite being from magrittr , the pipe operator is more commonly used with the package dplyr (which requires and loads magrittr), so whenever you see someone using %>% make sure you shouldn't load dplyr instead.

+0

你也意味着上面寫的代碼可以寫在不同的方式,而不需要使用%> % – Haidar

+9

儘管來自'magrittr',管道運算符更常用於包'dplyr'(它需要並加載'magrittr'),所以無論何時你看到有人使用'%>%',確保你不應該加載代替'dplyr'。 – Molx

5

在Windows上:如果您在%dopar%循環中使用%>%,則必須添加對加載包dplyr(或magrittr,其中dplyr加載)的引用。

例子:

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

如果省略.packages命令,並使用%do%,而不是讓它在一個單一的過程都跑,然後正常工作。原因是它都在一個進程中運行,所以它不需要專門加載新的軟件包。

+0

這是一個很好的觀點,值得特別關注foreach。過去我遇到過這個問題,這與接受答案解決的問題是不同的問題。 –

+0

我不確定這是否也是突出顯示這一點的正確場所,但我建議並基於迭代器包進行編輯,這樣可以簡化foreach循環。如果這不合適,請隨時忽略。 –

+1

謝謝。救了我。我不知道我需要在'foreach'中聲明依賴關係。 –

相關問題