gpt4 book ai didi

Rcpp:C++ 函数在 R 包中不起作用

转载 作者:行者123 更新时间:2023-12-04 21:41:25 24 4
gpt4 key购买 nike

我在 R 中有一些函数,我用 Rcpp 重新编码了它们。这些函数中的每一个都有一个独立的 .cpp 文件。一个名为 add_inflow() 的函数.之前我把所有cpp功能都放在桌面上,用Rcpp::sourceCpp("add_inflow.cpp") .然后,这个 c++ 函数可以通过插入参数给我一个输出值。

然后我想将它们嵌入到我的名为 stormwindmodel 的 R 包中。 , 关注 Compiled Code, R Packages, Hadley

首先,我运行 devtools::use_rcpp() ,然后将所有 cpp 函数移到 src 下文件。然后,我点击了 build&reload 按钮,它成功完成了。此时,我发现原来的 R 函数在环境面板中,但没有看到我的 cpp functinos。然后我运行 load_all ,这一次 cpp functinos 出现了。但是,当我运行 add_inflow_Cpp()函数,Rstudio 给了我这个输出:

Error in .Call("stormwindmodel_add_forward_speed_Cpp", PACKAGE = "stormwindmodel",  : 
"stormwindmodel_add_forward_speed_Cpp" not available for .Call() for package "stormwindmodel"

我错过了任何步骤吗?对我有什么建议吗?

如果问题质量不够好,请给我反馈,我会尽快编辑。

最佳答案

您可能错过了 useDynLib(<pkg>)输入您的 NAMESPACE文件。如果您使用 Roxygen 并遵循书中的示例,则需要在 R 文件中包含以下内容(此时最好的猜测是您错过了这一步):

#' @useDynLib your-package-name
#' @importFrom Rcpp sourceCpp
NULL
@useDynLib <pkg> Roxygen 指令指示 roxygen2包中包含 useDynLib(<pkg>)NAMESPACE每当您重新记录包时文件。

您是否记得将上面的相关行添加到 R 文件夹中包中的 R 文件中(例如,在 R/package-init.R 处),并在添加后重新记录包?如果您已正确完成所有操作,您应该会看到 useDynLib(<pkg>)添加到 NAMESPACE文件,带有 <pkg>替换为您的包的实际名称。

需要注意的是 devtools::use_rcpp()不会自动为您执行此操作 - 运行该功能后,它会指示您需要手动执行此步骤:
> devtools::use_rcpp()
Adding Rcpp to LinkingTo and Imports
* Creating `src/`.
* Ignoring generated binary files.
Next, include the following roxygen tags somewhere in your package:

#' @useDynLib sparklyr
#' @importFrom Rcpp sourceCpp
NULL

Then run document()

关于Rcpp:C++ 函数在 R 包中不起作用,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/41051003/

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