添加和访问包文件到新的R包

时间:2017-10-27 20:12:04

标签: r rstudio r-package

我在RStudio v.1.0.1.153中创建了一个新项目作为“R包”。默认情况下,这样一个新的R包项目带有包含模板函数

的文件hello.R
hello <- function() {
  print("Hello, world!")
}

只需构建并重新加载包(Ctrl + Shift + B)即可访问,然后在另一个R会话中只需加载构建的包并运行该函数:

> library(mylibrary)
> hello()
[1] "Hello, world!"

现在我想将我的功能组织到包中的几个文件中。我使用另一个函数将新文件methods.R添加到包的.\R\子目录中:

helloYouToo <- function() {
  print("Hello you too!")
}

但是,当我重建包并重新加载库时,我无法访问该函数:

> library(mylibrary)
> helloYouToo()
Error in helloYouToo() : could not find function "helloYouToo"

我有几个问题。我应该如何

  1. 将包函数划分为多个文件(不只是单个hello.R文件),以便将包含在其中的文件和函数包含在包中,并且
  2. 在包中同时访问的首选方式是什么?这些函数在同一个包中但在另一个文件中定义(如在methods.R中)?

1 个答案:

答案 0 :(得分:0)

正如@MrFlick建议的那样,我设法通过安装devtoolsroxygen(带有依赖项)来将功能分成几个文件。

在重建之后,程序包使其他文件中的新功能可供加载程序包的用户使用。但是,必须重新启动R会话才能使更新的函数定义可用:

Restarting R session...

> library(mylibrary)
> helloYouToo()
[1] "Hello you too!"

甚至可以在包中定义一个使用两个单独文件中定义的函数的函数:

helloDouble <- function() {
  hello()
  helloYouToo()
}

导致

Restarting R session...

> library(mylibrary)
> helloDouble()
[1] "Hello, world!"
[1] "Hello you too!"

我不需要触摸NAMESPACE文件,因为它与

一样通用
exportPattern("^[[:alpha:]]+")

允许我在包中创建的所有新功能可供包用户使用。