簡體   English   中英

在R中制作一個依賴於data.table的包

[英]Making a package in R that depends on data.table

我必須制作一個依賴於包data.table的R包。 但是,如果我要做一個功能,例如包裝中的下一個功能

randomdt <- function(){
    dt <- data.table(random = rnorm(10))
    dt[dt$random > 0]
}

函數[將對data.frame使用該方法,而不對data.table使用該方法,因此錯誤

Error in `[.data.frame`(x, i) : undefined columns selected

會出現。 通常,這可以通過使用get('[.data.table')或類似的方法( package::function是最簡單的)來解決,但似乎不起作用。 畢竟, [是一個原始函數,我不知道該函數的工作方式。

那么,如何從包中調用data.table [函數?

根據MichaelChirico的一些反饋以及ArunSoheil的評論進行了更新

粗略地說,您可能會考慮兩種方法。 第一種是將依賴關系構建到包本身中,第二種是在R代碼中包括用於測試data.table是否存在的data.table (如果找不到,甚至可能自動安裝)。

data.table FAQ在6.9中專門解決了這一問題 ,並指出您可以通過以下方式確保您的軟件包正確加載了data.table

i)在您的Description文件的Depends:字段中包含data.table,或者ii)在您的DESCRIPTION文件的Imports:字段中包含data.table,在NAMESPACE文件中的import(data.table)包含。

如注釋中所述,這是許多程序包中的常見R行為。

一種替代方法是創建特定的代碼行,以測試所需的軟件包並將其作為代碼的一部分導入。 鑒於使用上述提供的選項的優雅性,我認為這不是理想的解決方案。 但是,在技術上是可行的。

一種簡單的方法是使用requirelibrary檢查data.table的存在,如果無法附加錯誤,則會拋出錯誤。 您甚至可以使用一組簡單的條件語句來運行install.packages以在加載失敗時安裝所需的內容。

藝輝謝(的knitr名望)有大約之間的差別很大交library ,並require 在這里並為只使用一個強大的情況下, library在包是為即將到來的代碼絕對必要的情況下。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

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