2015-01-14 69 views
55

我想使用管道運營商%>%中介紹的magrittr包中的一個包,我自己寫了一下鏈接dplyr的數據轉換。 magrittrDESCRIPTION文件中被列爲ImportR:使用magrittr管道操作員自行編寫包裝

錯誤使用functionName(參數:加載自己的包,並測試其使用管道運營商,我得到了以下錯誤消息的功能後無法找到函數「%>%」

在功能的源代碼更改%>%magrittr::%>%沒有幫助或者是因爲包不能再建。

+0

我會建議不要在包內的函數內部使用管道運算符。它使調試變得更加困難(調用堆棧非常深入地使用管道)。對於軟件包,我只需要覆蓋一個臨時變量,這使得測試變得更容易(想想:R告訴你錯誤發生在哪一行)。該管道適合交互式使用,但對於編程而言,這可能是一種負擔。 –

回答

57

,如果你有magrittrDepends上市應該有正確的工作。然而,這是not advised。相反,你留在Importsmagrittr和下面的行添加到NAMESPACE

importFrom(magrittr,"%>%") 

我建議您閱讀Writing R extensions。第1.1.3和1.5.1段涵蓋了你的問題。

+1

謝謝,解決了這個問題。 –

+1

@alexanderketh在這種情況下,您應該點擊答案旁邊的綠色勾號將其標記爲已接受。歡迎來到SO! – tonytonov

+31

如果您使用的是'roxygen2',您可以添加'#'importFrom magrittr「%>%」'以在'roxygenize()'過程中自動填充NAMESPACE。 –

20

另一個解決方案 - 使用roxygen包。它是作爲devtools包的一部分實現的。一旦安裝了devtools,撥打devtools::document()會爲您更新您的NAMESPACE。它還可以自動生成帶有文檔的.Rd文件,這很方便。

您所要做的只是將格式爲#' @import packagename的特殊註釋添加到文件中,以導入該包中的所有函數,或者導入函數#' @importFrom packagename functionname。您可以根據需要在文件中包含儘可能多的這些註釋,以便您可以在每個文件的頂部或每個需要外部函數的函數中擁有一組註釋。

然後,您運行devtools::document()並解析代碼以查找這些註釋,然後爲您創建適當的NAMESPACE文件。簡單。

+0

當我這樣做時,它會調整與R腳本中第一個函數的幫助文件有關的以下氧氣註釋。我如何將全球氧氣評論與幫助文件分開? – jzadra

+2

我通常分別將每個功能的導入註釋。這樣如果文件中的其他功能發生變化,您的導入就會保持準確。那麼沒有全球定義。 –

7

假設你正在使用RStudio,哈德利的devtools包,並在DESCRIPTION文件的進口部分中列出magrittr,這裏有步驟,我把做%>%工作在我的包功能(S)。

首先,寫功能foo.R

#' Convert \code{data.frame} to \code{list}. 
#' 
#' @importFrom magrittr %>% 
#' @name %>% 
#' @rdname pipe 
#' @export 
#' @param x A \code{data.frame} object. 
#' @examples 
#' my_result <- foo(iris) 
#' 
foo <- function(x) { 
    x %>% 
     as.list() 
} 

其次,運行devtools::document()

三,運行devtools::load_all()

類似this這樣的文件將在您的R/目錄中創建,您的功能應按預期工作。

相關問題