使用R6类创建和记录软件包

Cha*_*rot 6 r class rstudio

由于使用RStudio,devtools和roxygen2,我目前正在使用R6类创建我的第一个R包(:D)。当我的软件包仅包含函数时,我可以毫无问题地构建和加载它。但是,当我想记录R6类(在此包https://cran.r-project.org/web/packages/data.tree/data.tree.pdf中具有“节点”之类的字段和方法)时,RStudio不会不想构建软件包。我试图在论坛上找到窍门,但是有关此问题的信息很少

我的程序:

  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. 
Run Code Online (Sandbox Code Playgroud)

我不明白如何解决此错误,因为Rstudio是正确的:R6Class不是函数!

我的问题:

我的程序正确吗?如何解决此错误?

我想知道Rstudio是否能够在R软件包构建中考虑R6类?如果没有,我可以手动完成,但是我只需要知道,就可以避免花很多时间尝试RStudio了:)

预先感谢您的帮助 !!

Cha*_*rot 5

非常感谢麦克弗利克!!

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

importFrom(R6, R6Class)
Run Code Online (Sandbox Code Playgroud)

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

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

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

再次感谢大家

  • 更一般地说,如果您打算使用来自不同包的函数(或类似函数的对象),我相信您需要执行您在此处指出的操作(`NAMESPACE` 中的 `importFrom(package, function)`)或使用每当你使用函数直接引用它来自的包时,`::` 操作符 (`package::function`)。在这种情况下,在定义类时,您将使用 `R6::R6Class`。 (2认同)