2016-02-23 46 views
4

由於RStudio,devtools和roxygen2,我目前正在創建我的第一個R包(帶有R6類的R)。當我的包只包含函數時,我可以毫無問題地構建和加載它。但是當我想記錄R6類(在這個包https://cran.r-project.org/web/packages/data.tree/data.tree.pdf中使用像「Node」這樣的字段和方法)時,RStudio不想構建這個包。我試圖找到在論壇上的伎倆,但有關此問題的信息非常匱乏創建並記錄一個包含R6類的包

我的方法:

  1. 打開Rstudio,創建一個新的項目,我選擇「R包」
  2. 我填寫包的名稱,我選擇我的包將基於的源文件(一個函數和3個類)。

- 在這一點上,程序是正常的,因爲我用「man」描述了我的不同類,「R」用這些類的不同腳本獲得了正確的結構。

但是當我嘗試建立並重新加載包(已預先加載的R6包)有一個錯誤:

==> R CMD INSTALL --no-multiarch --with-keep.source esa 

* installing to library ‘/home/cha/R/x86_64-pc-linux-gnu-library/3.0’ 
* installing *source* package ‘esa’ ... 
** R 
** preparing package for lazy loading 
Error in eval(expr, envir, enclos) : 
    impossible de trouver la fonction "R6Class" (translation: impossible to find the function "R6Class") 
Error : unable to load R code in package ‘esa’ 
ERROR: lazy loading failed for package ‘esa’ 
* removing ‘/home/cha/R/x86_64-pc-linux-gnu-library/3.0/esa’ 
* restoring previous ‘/home/cha/R/x86_64-pc-linux-gnu-library/3.0/esa’ 

Exited with status 1. 

我不知道如何爲Rstudio是正確解決這個錯誤:R6Class不是一個功能!

我的問題:

我的程序是否正確?我該如何解決這個錯誤?

我需要知道Rstudio是否能夠在R包構建中考慮R6類? 如果沒有,我可以手動完成,但我只需要知道爲了不要再用RStudio來試試我的時間:)

預先感謝您的幫助!

Cha

+0

您已經分享了您收到的錯誤,但不是生成它的實際代碼。請提供一個最小的[可重現的例子](http://stackoverflow.com/questions/5963269/how-to-make-a-great-r-reproducible-example) – MrFlick

+0

事實上,沒有那麼多的代碼,我做了所有的程序與RStudio(如我在問題中詳細說明的步驟中所述)。 我有我的R6class代碼(一個非常基本的一個): ELEM < - R6Class( 「elem_data」, 公共=名單( ELEM = NA ),#公共 私人=名單( amethod方法=功能( )self $ name )#private ) –

回答

4

非常感謝你McFlick!

我剛剛收到R6Class軟件包的開發者的回答。他們告訴我,我只需要在NAMESPACE文件中添加

importFrom(R6, R6Class) 

。它正常工作! (我永遠不會找到它:S)

此外,要添加一些項目,如繼承,字段和方法,他們建議以具有預期結構的包作爲示例.RD。

最後他們推薦一本書http://r-pkgs.had.co.nz/,我想我會讀它!

再次感謝大家

+1

更一般地說,如果您打算使用不同包中的函數(或類似函數的對象),我相信您需要執行此處註釋的內容('importFrom(package ,函數)''NAMESPACE''),或者每當你使用函數直接引用它來自的包('package :: function')時使用'::'運算符。在這種情況下,定義類時,可以使用'R6 :: R6Class'。 –