r - 在包开发中使用 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 标头中使用?
先感谢您!
解决方案
无需导入 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
推荐阅读
- azure - 如何确定 Azure 中应用服务计划 90% CPU 百分比的原因?
- c++ - 警告 C6386 - 如何避免缓冲区溢出
- nginx - Nginx 没有从远程框外响应
- python - BeautifulSoup 的 site.content 和 site.read() 有什么区别?
- r - 在 R 中重新排列数据框以进行面板分析
- function - javascript对象初始化器的方法定义中'function'关键字的真正作用是什么
- reactjs - 大日历反应我们可以在月份的不同日期有多种颜色吗?
- c# - 我将 c# windows 应用程序与 Access 数据库 (accdb) 连接,但该应用程序在其他计算机上不起作用
- c++ - QString从列表中解析项目
- angular - Angular 6通过服务将组件之间的数据共享到模板组件中