gpt4 book ai didi

在R包中重命名和隐藏导出的Rcpp函数

转载 作者:行者123 更新时间:2023-12-04 05:22:54 24 4
gpt4 key购买 nike

编写一个R包,我有一个R函数,它调用特定的Rcpp函数。 Rcpp函数仅用作辅助函数,我不想为其创建.Rd文件。
到目前为止,我的解决方案是在命名空间文件中导出这两个函数,这会导致警告在我运行check命令后立即为Rcpp函数创建一个.Rd文件。如果我删除了命名空间文件中的helper函数,那么我将摆脱此警告,从而导致R函数不再能够找到它的问题。

有没有办法解决这个问题。这意味着要使Rcpp函数对于R函数仍然可见,同时要摆脱有关Rcpp函数不存在.Rd文件的警告?

非常感谢 :-)

最佳答案

注册问题的来源:NAMESPACE文件

我假设在NAMESPACE文件中有:

exportPattern("^[[:alpha:]]+") 

这基本上是“自动”导出任何以字母开头的功能。因此,将提取通过 // [[Rcpp::exports]]导出的Rcpp函数。

为了解决这个问题,有两种解决方案。第一个是“hack”,第二个是正确使用 export()文件中的 NAMESPACE

自定义命名Rcpp函数

对于第一个解决方案,您可以更改导出Rcpp函数的方式,以明确说明该函数应如何显示在R中。由于 NAMESPACE的配置(注册所有以字母开头的函数),因此此名称更改的重要方面是:在函数名称前添加句点( .),例如:
// [[Rcpp::export(".function_name")]]

举一个真实的例子,使用函数C++函数 some_function():
// [[Rcpp::export]]
void some_function(int value)

此处使用Rcpp属性会将功能名称 some_function()导出到R中

现在,要显式命名该函数,R可能会有所不同:
// [[Rcpp::export(.some_function)]]
void some_function(int value)

它将作为 .some_function()导出到R中。可能更具说明性的是,我们可以将其更改为一个完全不同的名称,例如
// [[Rcpp::export(toad)]]
void some_function(int value)

这意味着调用C++函数的导出R函数为 toad()

指定导出

您可能希望采用的另一种方法是显式声明应导出哪个函数和不应该导出哪个函数。为此,必须删除 NAMESPACE文件中的 exportPattern("^[[:alpha:]]+")条目,并且必须将每个可用的功能指定为 export(function)。例如, cIRT package's NAMESPACE 具有应“公开”导出的每个函数。

话虽如此,大多数用户使用 roxygen2 生成文档。在此文档生成器下,您可以在 roxygen2标签中指定,例如 #' @tag//' @tag,应使用以下命令将函数导出到 NAMESPACE中:
# R code
#' @export

或者
// C++ code
//' @export

在C++的功能文档中,它看起来像:
//' Title
//'
//' Description
//'
//' @export

如果您不希望导出函数,那么您所要做的就是不使用 //' @export对其进行文档化。

关于在R包中重命名和隐藏导出的Rcpp函数,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/46039132/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com