【发布时间】:2021-02-17 03:28:18
【问题描述】:
简而言之:如何在 Rccp C++ 代码中调用 agrep C 内部函数,当用户使用基本 R 中的常规 agrep 函数时,该函数会被调用?
长篇大论:我在这里发现了多个关于如何从 Rcpp 中调用为另一个包创建的 C 或 C++ 函数的问题(例如 using C function from other package in Rcpp 和Rcpp: Call C function from a package within Rcpp)。
然而,我想要实现的事情同时更简单,但记录也更少:它是从 Rcpp 中直接调用一个 .Internal C 函数使用基础 R 而不是另一个包,没有与 R 接口(即,不执行Call R functions in Rcpp 中所说的操作)。对于位于基本 R 的 agrep 包装器下方的 .Internal C 函数,我该如何做到这一点?
我在这里尝试调用的特定函数是 agrep 内部 C 函数。就上下文而言,我最终要实现的是加快对 agrep 的调用,以便在必须针对数百万个 x 目标中的每一个检查数百万个模式时。
【问题讨论】:
-
简而言之,您不能轻易或直接作为@Oliver 详细说明:R 根本不公开这些内部函数。但是,例如,请参阅 Rcpp Gallery article on using Boost regex with Rcpp -- 您可以以同样的方式找到任何其他正则表达式库。
-
@DirkEddelbuettel 我明白了,谢谢!快速跟进:正如我对@Oliver 所说,使用
do_agrep或其他可能在src/include/Internal.h中声明的东西怎么样? -
仍然没有,因为 R Core 将所有这些功能标记为“隐藏”。如果您更仔细地查看我在 CRAN 上的(有争议的大型)包集,您会发现两个
RApi*,因为需要将代码复制出来以“取消隐藏”它。那时,您还可以按照我之前的评论建议使用通用 reg.exp 引擎。祝你好运!