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

时间:2012-04-25 23:29:07

标签: r import namespaces roxygen

好吧,第一次尝试写一个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'时替换先前的导入'小时'   警告:在加载'lubridate'时替换先前的导入'mday'   警告:在加载'lubridate'时替换上一个导入'月'   警告:在加载'lubridate'时替换先前导入的'wday'   警告:在加载'lubridate'时替换上一个导入'周'   警告:在加载'lubridate'时替换先前的导入'yday'   警告:在加载'lubridate'时替换上一个导入'年'   **帮助
   * 安装帮助索引
  **建立包装指数...
  **测试是否可以装载已安装的包装
  警告信息:
  1:加载'lubridate'时替换先前的导入'小时'   2:在加载'lubridate'时替换先前的导入'mday'   3:加载'lubridate'时替换上一个导入'月'   4:在加载'lubridate'时替换先前的导入'wday'   5:加载'lubridate'时替换先前的导入'周'   6:加载'lubridate'时替换先前的导入'yday'   7:加载'lubridate'时替换先前的导入'年'

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

  
    

库(PKG)
    覆盖POSIXt,Date和difftime的+和 - 方法     警告信息:
    1:加载'lubridate'时替换先前的导入'小时'     2:在加载'lubridate'时替换先前的导入'mday'     3:加载'lubridate'时替换上一个导入'月'     4:在加载'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来描述。帮助

2 个答案:

答案 0 :(得分:30)

警告是因为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中所述。这里的解决方案是联系zoo的维护者,packageDescription('zoo')$Maintainer(维护者对R非常精通,我觉得我错误地诊断了......)。

答案 1 :(得分:1)

作为MATCH错误的临时解决方法,我已成功将zoo包列在包Depends:文件的DESCRIPTION部分下。