gpt4 book ai didi

r - 在 R 中制作一个依赖于 data.table 的包

转载 作者:行者123 更新时间:2023-12-04 14:57:09 24 4
gpt4 key购买 nike

我必须制作一个依赖于包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 FAQ在 6.9 中专门解决了这个问题,并声明您可以确保 data.table由您的包通过以下方式适当加载:

Either i) include data.table in the Depends: field of your DESCRIPTION file, or ii) include data.table in the Imports: field of your DESCRIPTION file AND import(data.table) in your NAMESPACE file.



正如评论中所指出的,这是许多包中常见的 R 行为。

另一种方法是创建特定的代码行,用于测试和导入所需的包作为代码的一部分。鉴于使用上面提供的选项的优雅,我认为这不是理想的解决方案。但是,技术上是可行的。

一个简单的方法是使用 requirelibrary检查 data.table 是否存在,如果无法附加则抛出错误。您甚至可以使用一组简单的条件语句来运行 install.packages如果加载失败,请安装您需要的内容。

Yihui Xie(以 knitr 成名)发表了一篇关于 library 之间差异的精彩帖子。和 require here并为仅使用 library 提供了强有力的理由在包对于即将到来的代码绝对必要的情况下。

关于r - 在 R 中制作一个依赖于 data.table 的包,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/33039194/

24 4 0