好吧,第一次尝试写一个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来描述。帮助
答案 0 :(得分:30)
警告是因为data.table和lubridate都定义了符号hour
等;见data.table::hour
和lubridate::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
部分下。