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

Adding and accessing package files to a new R package

我在 RStudio v.1.0.1.153 中创建了一个新项目 "R package"。默认情况下,这样一个新的 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中)?

正如@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:]]+")

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