r - 如何在包中使用 data.table 而不导入所有函数?

标签 r dplyr data.table code-translation dtplyr

我正在构建一个 R 包,我想在其中使用 dtplyr 来执行各种数据操作。我的问题是,dtplyr 似乎只有在导入整个 data.table 时才起作用(即使用 roxygen #' @import data.table)。如果没有这个,我会得到如下错误:

Error in .(x = sum(x), y = sum(y),  : 
  could not find function "." 

如果我可以通过仅从 data.table 导入某些函数来解决这个问题,那就太好了,但是包中似乎没有函数 .() 。我对 data.table 的了解有限,但我只能假设它使用 .() 来编辑解析的代码(类似于基本 R bquote()),但出于某种原因,dtplyr 需要加载 data.table 才能正常工作。

我尝试过各种方法,例如 withr::with_package("data.table", code)requireNamespace("data.table"),但是远导入整个包似乎是唯一有效的方法。这不是一个可行的解决方案,因为它通过从 data.table 导入如此多的函数,完全破坏了我正在处理的包中维护良好的命名空间。

注意,这个包包含一个项目, future 许多其他分析师将致力于该项目。虽然简单地编写 data.table 代码在性能和一般良好实践方面可能更可取,但使用 dtplyr 转换 dplyr 代码可以带来提升在这种情况下,可读性和易用性更为重要。

最佳答案

我找到的(已记录的)解决方案是设置 .datatable.aware <- TRUE包源代码中的某处。根据documentation ,如果您使用 data.table在一个包中而不导入整个内容,您应该这样做,以便 [.data.table()不会恢复调用 [.data.frame() 。来自文档:

...please define .datatable.aware = TRUE anywhere in your R source code (no need to export). This tells data.table that you as a package developer have designed your code to intentionally rely on data.table functionality even though it may not be obvious from inspecting your NAMESPACE file.

关于r - 如何在包中使用 data.table 而不导入所有函数?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/69544896/

相关文章:

r - 在 R 中的同一列中获取计数和总和

r - 给定任意表达式或字符串,确定运行表达式所需的变量

r - 仅从字符串中提取数字

将大于 0 的单元格值替换为列名

r - 通过 dplyr 中的动态列名进行汇总

R gt 表格格式 : How can I take my long gt table and make it wide?

R:如何禁用包函数列表的截断?

r - 通过传递带有要选择的列名的有序向量对 dplyr 中的列进行动态排序

r - data.table 中的唯一标识符

r - 使用 data.table 生成多个 qplots