使用R6类创建和记录包

时间:2016-02-23 15:20:41

标签: r class rstudio

由于RStudio,devtools和roxygen2,我目前正在使用R6类创建我的第一个R包(:D)。当我的包只包含函数时,我可以毫无问题地构建和加载它。但是当我想要记录R6类(在这个包https://cran.r-project.org/web/packages/data.tree/data.tree.pdf中使用像“Node”这样的字段和方法)时,RStudio不想构建包。我试图在论坛上找到这个技巧,但关于这个问题的信息非常缺乏

我的程序:

  1. 打开Rstudio,创建一个新项目,我选择“R package”
  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的时间:)

    提前感谢您的帮助!!

2 个答案:

答案 0 :(得分:4)

非常感谢McFlick !!

我刚收到R6Class包开发人员的回答。他们告诉我,我只需要添加一行

importFrom(R6, R6Class)

在NAMESPACE文件中。它工作正常! (我永远不会找到它:S)

此外,为了添加一些项目,例如继承,字段和方法,他们建议以具有预期结构的包中的.Rd为例。

最后他们推荐了一本书http://r-pkgs.had.co.nz/,我想我会读它!

再次感谢大家

答案 1 :(得分:0)

也许您应该在使用R6类的.R文件中添加以下内容,并让'devtools'负责创建NAMESPACE文件

#' @importFrom R6 R6Class   

> devtools::check() # Will create the NAMESPACE file for you