在包开发中使用 data.table 包中的 `[` 方法
Use `[` method from data.table package in package development
我们正在创建一个包,其中我们的一个函数使用 data.table 包的函数。
我们尝试在代码中尽可能多地使用 ::
,而不是通过我们的 roxygen header 导入整个包。
对于函数来说,这很容易。例如:
data.table::setkey(our_data_1, our_variable)
然而,我们不知道如何为一个方法做到这一点。例如:
our_data_3 <- our_data_1[our_data_2, roll = "nearest"]
其中[
有针对data.table的具体方法,表示为:
methods(`[`)
我尝试了多种方法。使用 @importFrom
的多个组合失败。例如,将以下行添加到我们的 roxygen header...
@importFrom data.table `[.data.table`
...当 运行 devtools::document()
时返回以下内容:
Warning message:
object ‘[.data.table’ is not exported by 'namespace:data.table'
我也在我们的代码中尝试过 [.data.table
之类的东西,但也失败了...
在我们的 roxygen header 中导入整个 data.table 包 工作 (@import data.table
),但这不是首选,因为我们想要在我们的代码中引用每个函数的包(或者至少使用@importFrom
)。
有没有办法在函数代码中使用 data.table 的 [
方法而不导入整个 data.table 包?或者至少可以只导入方法,例如通过在我们的 roxygen header?
中使用 @importFrom
提前致谢!
我认为您不需要导入 S3 方法或像我们在函数上那样使用 ::
。
在我看来,您只需要在 DESCRIPTION 中添加 data.table
作为依赖项,它应该可以正常工作。
R 会知道您正在将 [
应用于 data.table 对象,并会使用正确的方法。
无需导入 S3 方法,它们由对象的 class 自动调度。
在 [
data.table 方法的情况下,我们使用一个技巧来确保 data.table 传递给期望 data.frame 的库将得到处理正确地,作为 data.frame。这种处理是根据 NAMESPACE 文件决定的。如果您不在 NAMESPACE 中导入 data.table,则 data.table 方法假定您希望将其用作 data.frame.
您可以通过在任何 R 脚本文件中使用额外变量 .datatable.aware=TRUE
明确说明您的意图。
您应该阅读 Importing data.table 小插图,其中对此进行了很好的描述。
我还放了示例包,如果由于某种原因您的代码仍然无法工作,您可以从那里 运行 和调试:https://gitlab.com/jangorecki/useDTmethod
我们正在创建一个包,其中我们的一个函数使用 data.table 包的函数。
我们尝试在代码中尽可能多地使用 ::
,而不是通过我们的 roxygen header 导入整个包。
对于函数来说,这很容易。例如:
data.table::setkey(our_data_1, our_variable)
然而,我们不知道如何为一个方法做到这一点。例如:
our_data_3 <- our_data_1[our_data_2, roll = "nearest"]
其中[
有针对data.table的具体方法,表示为:
methods(`[`)
我尝试了多种方法。使用 @importFrom
的多个组合失败。例如,将以下行添加到我们的 roxygen header...
@importFrom data.table `[.data.table`
...当 运行 devtools::document()
时返回以下内容:
Warning message:
object ‘[.data.table’ is not exported by 'namespace:data.table'
我也在我们的代码中尝试过 [.data.table
之类的东西,但也失败了...
在我们的 roxygen header 中导入整个 data.table 包 工作 (@import data.table
),但这不是首选,因为我们想要在我们的代码中引用每个函数的包(或者至少使用@importFrom
)。
有没有办法在函数代码中使用 data.table 的 [
方法而不导入整个 data.table 包?或者至少可以只导入方法,例如通过在我们的 roxygen header?
@importFrom
提前致谢!
我认为您不需要导入 S3 方法或像我们在函数上那样使用 ::
。
在我看来,您只需要在 DESCRIPTION 中添加 data.table
作为依赖项,它应该可以正常工作。
R 会知道您正在将 [
应用于 data.table 对象,并会使用正确的方法。
无需导入 S3 方法,它们由对象的 class 自动调度。
在 [
data.table 方法的情况下,我们使用一个技巧来确保 data.table 传递给期望 data.frame 的库将得到处理正确地,作为 data.frame。这种处理是根据 NAMESPACE 文件决定的。如果您不在 NAMESPACE 中导入 data.table,则 data.table 方法假定您希望将其用作 data.frame.
您可以通过在任何 R 脚本文件中使用额外变量 .datatable.aware=TRUE
明确说明您的意图。
您应该阅读 Importing data.table 小插图,其中对此进行了很好的描述。
我还放了示例包,如果由于某种原因您的代码仍然无法工作,您可以从那里 运行 和调试:https://gitlab.com/jangorecki/useDTmethod