[英]When writing my own R package, I can't seem to get other packages to import correctly
好吧,第一次嘗試寫一個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來描述。 救命?
警告是因為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)
,如Writing R Extensions,1.6.2中所述。 這里的解決方案是聯系zoo
的維護者, packageDescription('zoo')$Maintainer
(維護人員對R非常熟悉,我覺得我錯誤地診斷了......)。
作為MATCH錯誤的臨時解決方法,我已經成功列出了包的DESCRIPTION
文件的Depends:
部分下的zoo
包。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.