【发布时间】:2021-12-01 07:22:57
【问题描述】:
我正在构建一个 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 导入如此多的函数而完全破坏了我正在处理的包中维护良好的命名空间。
注意,此软件包包含一个项目,许多其他分析师将在未来开展这项工作。虽然简单地编写data.table 代码在性能和一般良好实践方面可能更可取,但使用dtplyr 翻译dplyr 代码可以提高可读性和易用性,这在这种情况下更为重要。
【问题讨论】:
-
你能在 NAMESPACE 中试试
importFrom data.table -
这会导致运行
devtools::load_all()时出错:Error in asChar(ivars) : empty name in directive 'importFrom' in 'NAMESPACE' file:( -
我认为
importFrom在两个地方,即 NAMESPACE 和函数中应该可以工作importFrom data.table . -
你能查一下here
-
您可能需要导入
[以及.,也许是patterns(不确定dtplyr使用什么)。如果维护良好的命名空间非常重要(我认为您的用户不会知道或关心),您总是可以exclude 函数,您不想让它混乱。为此,请使用#' @rawNamespace import(data.table, except=c(transpose))之类的内容。
标签: r dplyr data.table code-translation dtplyr