作为一个最小的工作示例,我试图将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)
Run Code Online (Sandbox Code Playgroud)
我Build & Reload在 RStudio 中点击并收到错误消息:
==> 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.
Run Code Online (Sandbox Code Playgroud)
似乎连最基本的import都失败了——系统找不到abbey. 显然,我必须忽略一些明显的东西 - 出了什么问题?
根据我的尝试:您无法导入 abbey,因为它不是由 MASS 导出的。
> library(MASS)
> 'abbey' %in% getNamespaceExports(getNamespace('MASS'))
[1] FALSE
Run Code Online (Sandbox Code Playgroud)
abbey 是一个包数据集,由 data/abbey.rda 文件定义,而不是由包定义的常规符号名称。
正如建议的,你应该只使用 MASS::abbey,甚至添加 R/data.R:
abbey <- MASS::abbey
Run Code Online (Sandbox Code Playgroud)
在安装时将数据集复制到包命名空间中。
| 归档时间: |
|
| 查看次数: |
1039 次 |
| 最近记录: |