在编写自己的R包时,我似乎无法正确导入其他包

ugh*_*ugh 30 import namespaces r roxygen

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

package.skeleton("pkg",code_files=some.filenames)
roxygenize("okg")
Run Code Online (Sandbox Code Playgroud)

我正在使用roxygen2并在我的"pkg-package.R"文件中输入以下内容:

@import data.table zoo lubridate
Run Code Online (Sandbox Code Playgroud)

从终端,我然后运行:

R CMD build pkg
R CMD check pkg
R CMD install pkg
Run Code Online (Sandbox Code Playgroud)

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

**为延迟加载准备包
警告:在加载'lubridate'时替换先前导入'hour'
警告:在加载'lubridate'时
替换先前导入'mday'
警告:在加载'lubridate'时替换先前的导入'月' 警告:替换之前的加载'lubridate'时导入'wday'
警告:加载'lubridate'时替换上一个导入'周'
警告:加载'lubridate'时替换上一个导入'yday'
警告:加载'lubridate'时替换上一个导入'year'
**帮助
*安装帮助索引
**构建软件包索引...
**测试是否可以加载已安装的软件包
警告消息:
1:在加载'lubridate'时替换先前导入'小时'
2:在加载'lubridate时替换先前导入'mday' '
3:在加载'lubridate'时替换先前导入'月'
4:在加载'lubridate'时替换先前导入'wday'5:在加载'lubridate'时
替换先前的导入'周'
6:在加载时替换先前导入'yday' "lubrid 吃''
7 ' :加载'lubridate'时替换上一个导入'年'

我真的不确定如何制作这些,但它们似乎是覆盖命名空间中的东西的典型警告.在任何情况下,我都可以安装软件包,但是当我尝试使用它时会发生什么:

library(pkg)
覆盖POSIXt,Date和difftime的+和 - 方法
警告消息:
1:在加载'lubridate'时
替换先前导入'hour'2:在加载'lubridate'时替换先前导入'mday'3
:替换先前导入' '加载'lubridate'时的'月':加载'lubridate'时
替换先前导入'wday'5:加载'lubridate'时
替换上一个导入'周'
6:加载'lubridate'时替换上一个导入'yday'7
:替换之前的加载'lubridate'时导入'年'
d < - my.function(arg1,arg2)
MATCH中的错误(x,x):找不到函数"MATCH"

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

我已经尝试在"pkg-package.R"文件和NAMESPACE中手动更改导入的顺序.根据我在其他地方找到的东西,我没有添加任何Imports或Depends来描述.救命?

Mar*_*gan 30

警告是因为data.table和lubridate都定义了符号hour等; 看到data.table::hourlubridate::hour.你可以通过只导入你想要的lubridate/data.table中的函数来避免这种情况,而不是整个包; 标准的NAMESPACE文件将包含

importFrom(lubridate, hour)
Run Code Online (Sandbox Code Playgroud)

例如.在roxygen2中你会使用标签:

@importFrom lubridate hour
Run Code Online (Sandbox Code Playgroud)

MATCH问题可能是因为merge调度错误,可能是因为zoo应该在其名称空间中S3method(merge, zoo)而不是export(merge.zoo)如编写R Extensions 1.6.2中所述.这里的解决方案是联系维护者zoo,packageDescription('zoo')$Maintainer(维护者对R非常熟悉,我觉得我错误地诊断了......).

  • @krishnab函数首先在自己的环境中查找它们使用的符号,然后在定义函数的环境中查找,因此将自动找到data.table :: hour使用的data.table函数. (2认同)
  • 当您需要使用多个包的import来访问特定的对象类并且它们有名称冲突时会发生什么?我正在使用spatstat和raster(区域,旋转,移位)来讨论这个问题.我不能使用importFrom,因为我使用了两个函数,需要包类.有没有办法掩盖与spatstat冲突的三个栅格函数?我应该注意,仅使用依赖于DESCRIPTION不起作用. (2认同)
  • 您还可以使用 import except:/sf/ask/3632945431/ except-one-when-building-a-package (2认同)