编写R包:如何导入另一个包?

时间:2014-08-13 12:31:40

标签: r import package

作为一个最小的工作示例,我尝试将MASS包中的一些对象导入到我自己的包中(称为Test) - 以abbey数据集为例:

### In R/Test.R:
#' @import MASS
abbey     # Check that the dataset has been imported OK

### DESCRIPTION:
Package: Test
...
Imports: MASS

### NAMESPACE:
# Generated by roxygen2 (4.0.1): do not edit by hand
import(MASS)

我在RStudio中点击Build & Reload并收到错误:

==> devtools::document(roclets=c('rd', 'collate', 'namespace'))

Updating Test documentation
Loading Test
Error in eval(expr, envir, enclos) : object 'abbey' not found
Writing NAMESPACE
Documentation completed

==> Rcmd.exe INSTALL --no-multiarch --with-keep.source Test

* installing to library '.../R/R-3.1.0/library'
* installing *source* package 'Test' ...
** R
** preparing package for lazy loading
Error in eval(expr, envir, enclos) : object 'abbey' not found
Error : unable to load R code in package 'Test'
ERROR: lazy loading failed for package 'Test'
* removing '.../R/R-3.1.0/library/Test'
* restoring previous '.../R/R-3.1.0/library/Test'

Exited with status 1.

似乎即使是最基本的import也失败了 - 系统无法找到abbey。显然,我必须忽略一些明显的东西 - 出了什么问题?

1 个答案:

答案 0 :(得分:0)

从我的尝试: 您无法导入修道院,因为它不是由MASS导出的。

> library(MASS)
> 'abbey' %in% getNamespaceExports(getNamespace('MASS'))
[1] FALSE

abbey是一个包数据集,由data / abbey.rda文件定义,而不是由包定义的常规符号名称。

根据建议你应该使用MASS :: abbey,甚至添加R / data.R:

abbey <- MASS::abbey

在安装时复制软件包命名空间中的数据集。