37

好吧,第一次尝试编写 R 包,我被卡住了。这是我创建包的方式:

package.skeleton("pkg",code_files=some.filenames)
roxygenize("okg")

我正在使用 roxygen2 并在我的“pkg-package.R”文件中有以下导入:

@import data.table zoo lubridate

然后从终端运行:

R CMD build pkg
R CMD check pkg
R CMD install pkg

在检查阶段,我收到以下警告:

** 为延迟加载准备包
警告:加载“lubridate”时替换之前的导入“小时”<br> 警告:加载“lubridate”时替换之前的导入“mday”<br> 警告:加载“时”替换之前的导入“月” lubridate'<br> 警告:加载 'lubridate' 时替换之前的导入 'wday'<br> 警告:加载 'lubridate' 时替换之前的导入 'week'
警告:加载 'lubridate' 时替换之前的导入 'yday'<br>警告:在加载“lubridate”时替换之前的导入“年份”<br> ** 帮助
*安装帮助索引
** 构建包索引 ...
** 测试是否可以加载已安装的包
警告消息:
1:加载“lubridate”时替换之前的导入“小时”<br> 2:加载“lubridate”时替换之前的导入“mday”<br> 3:加载“lubridate”时替换之前的导入“月”<br> 4:加载“lubridate”时替换上一个导入“wday”<br> 5:加载“lubridate”时替换上一个导入“周”<br> 6:加载“lubridate”时替换上一个导入“yday”<br> 7:替换上一个加载“lubridate”时导入“年份”

我真的不知道该怎么做,但它们似乎是覆盖命名空间中的东西的典型警告。无论如何,我都可以安装该软件包,但是当我尝试使用它时会发生以下情况:

library(pkg)
覆盖 POSIXt、Date 和 difftime 的 + 和 - 方法
警告消息:
1:加载“lubridate”时替换之前的导入“小时”<br> 2:加载“lubridate”时替换之前的导入“mday”<br> 3: 加载 'lubridate' 时替换之前的导入 'month'<br> 4: 加载 'lubridate' 时替换之前的导入 'wday'<br> 5: 加载 'lubridate' 时替换之前的导入 'week'<br> 6:加载“lubridate”时替换先前的导入“yday”<br> 7:加载“lubridate”时替换先前的导入“年”<br> d <- my.function(arg1, arg2)
MATCH(x, x) 中的错误:找不到功能“匹配”

使用 traceback(),我发现这是在调用 merge.zoo() 期间生成的。所以我尝试在我的 R 会话期间手动加载动物园,瞧,然后该功能正常工作而没有错误消息。

我已经尝试在“pkg-package.R”文件以及 NAMESPACE 中手动更改导入的顺序。但是,根据我在其他地方找到的内容,我没有添加任何 Imports 或 Depends 到DESCRIPTION。帮助?

4

2 回答 2

38

警告是因为 data.table 和 lubridate 都定义了一个符号hour等;见data.table::hourlubridate::hour。您可以通过仅导入所需的 lubridate / data.table 函数而不是整个包来避免这种情况;一个标准的 NAMESPACE 文件将包含

importFrom(lubridate, hour)

例如。在 roxygen2 中,您将使用标签:

@importFrom lubridate hour

MATCH 问题可能是因为merge调度不正确,可能是因为 zoo 应该在其名称空间中S3method(merge, zoo)而不是export(merge.zoo),如编写 R 扩展,1.6.2 中所述。这里的解决方案是联系 , 的维护者zoopackageDescription('zoo')$Maintainer维护者非常精通 R,我觉得我误诊了......)。

于 2012-04-26T00:54:57.513 回答
1

作为 MATCH 错误的临时解决方法,我已经成功地在包文件zooDepends:部分下列出了包DESCRIPTION

于 2013-02-01T20:12:08.107 回答