簡體   English   中英

在編寫自己的R包時,我似乎無法正確導入其他包

[英]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::hourlubridate::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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM