Jon*_* B. 5 methods import r package data.table
我们正在创建一个包,其中我们的一个函数使用 data.table 包的函数。我们没有通过我们的 roxygen 头文件导入整个包,而是尝试::
在我们的代码中尽可能多地使用。
对于函数,这很容易。例如:
data.table::setkey(our_data_1, our_variable)
Run Code Online (Sandbox Code Playgroud)
然而,我们不知道如何为一个方法做到这一点。例如:
our_data_3 <- our_data_1[our_data_2, roll = "nearest"]
Run Code Online (Sandbox Code Playgroud)
其中[
data.tables有具体的方法,表示为:
methods(`[`)
Run Code Online (Sandbox Code Playgroud)
我尝试了多种方法。多个组合,使用@importFrom
,失败。例如,将以下行添加到我们的 roxygen 标头中...
@importFrom data.table `[.data.table`
Run Code Online (Sandbox Code Playgroud)
...运行时返回以下内容devtools::document()
:
Warning message:
object ‘[.data.table’ is not exported by 'namespace:data.table'
Run Code Online (Sandbox Code Playgroud)
我也在[.data.table
我们的代码中尝试过类似的东西,但那些也失败了......
导入整个data.table包在我们roxygen头奋力(@import data.table
),但这不是首选,因为我们要引用包中的每个功能的我们的代码中(或至少使用@importFrom
)。
有没有办法[
在不导入整个 data.table 包的情况下在函数代码中使用data.table的方法?或者至少可以只导入该方法,例如通过@importFrom
在我们的 roxygen 标头中使用?
先感谢您!
不需要导入 S3 方法,它们由对象的类自动调度。
在[
data.table 方法的情况下,我们使用一个技巧来确保传递给需要 data.frame 的库的 data.table 将作为 data.frame 被正确处理。这种处理是根据 NAMESPACE 文件决定的。如果您不在 NAMESPACE 中导入 data.table,那么 data.table 方法假定您想将其用作 data.frame。
您可以通过.datatable.aware=TRUE
在任何 R 脚本文件中使用额外变量来明确说明您的意图。
您应该阅读导入 data.table小插图,其中对此进行了很好的描述。
我还放了示例包,如果由于某种原因您的代码仍然无法运行,您可以从那里运行和调试:https : //gitlab.com/jangorecki/useDTmethod