2

我正在构建一个 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)and requireNamespace("data.table"),但到目前为止,导入整个包是唯一可行的方法。这不是一个可行的解决方案,因为它通过从data.table.

注意,这个包包含一个项目,许多其他分析师将在未来进行工作。虽然简单地编写data.table代码在性能和一般良好实践方面可能更可取,但使用dtplyr翻译dplyr代码可以提高可读性和易用性,这在这种情况下更为重要。

4

1 回答 1

2

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

...请在您的 R 源代码中的任何位置定义 .datatable.aware = TRUE(无需导出)。这告诉 data.table 作为包开发人员,您已将代码设计为有意依赖 data.table 功能,即使通过检查您的 NAMESPACE 文件可能并不明显。

于 2021-10-27T22:46:13.273 回答