繁体   English   中英

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

[英]Adding and accessing package files to a new 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 )?

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

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

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM