首页 > 解决方案 > 在包开发中使用 data.table 包中的 `[` 方法

问题描述

我们正在创建一个包,其中我们的一个函数使用 data.table 包的函数。我们没有通过 roxygen 标头导入整个包,而是尝试::在代码中尽可能多地使用。

对于一个函数,这很容易。例如:

data.table::setkey(our_data_1, our_variable)

然而,我们不知道如何为方法做到这一点。例如:

our_data_3 <- our_data_1[our_data_2, roll = "nearest"]

其中[有data.tables的具体方法,表示为:

methods(`[`)

我尝试了多种方法。多个组合,使用@importFrom,失败。例如,将以下行添加到我们的 roxygen 标头...

@importFrom data.table `[.data.table`

...运行时返回以下内容devtools::document()

Warning message:
object ‘[.data.table’ is not exported by 'namespace:data.table' 

我也在[.data.table我们的代码中尝试过类似的东西,但那些也失败了......

在我们的 roxygen 头文件中导入整个 data.table 包是可行的@import data.table,但这不是首选,因为我们想在我们的代码中引用每个函数的包(或至少使用@importFrom)。

有没有办法[在函数的代码中使用 data.table 的方法而不导入整个 data.table 包?或者至少可以只导入方法,例如通过@importFrom在我们的 roxygen 标头中使用?

先感谢您!

标签: rmethodsimportdata.tablepackage

解决方案


无需导入 S3 方法,它们由对象的类自动分派。

[data.table 方法的情况下,我们使用一个技巧来确保传递给期望 data.frame 的库的 data.table 将作为 data.frame 被正确处理。这种处理是根据 NAMESPACE 文件决定的。如果您不在 NAMESPACE 中导入 data.table,则 data.table 方法假定您想将其用作 data.frame。

.datatable.aware=TRUE您可以通过在任何 R 脚本文件中使用额外变量来明确说明您的意图。

您应该阅读详细描述的Importing data.table小插图。

我还放了示例包,如果由于某种原因您的代码仍然无法工作,您可以从那里运行和调试:https ://gitlab.com/jangorecki/useDTmethod


推荐阅读