首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >带有Rcpp的r包构建,但当调用函数时:.Call中的错误

带有Rcpp的r包构建,但当调用函数时:.Call中的错误
EN

Stack Overflow用户
提问于 2017-05-08 11:04:06
回答 1查看 1.3K关注 0票数 2

我正试图将C++代码添加到我的R包中。我的包代码在Github:https://github.com/wadpac/GGIR上。我一直在阅读写R扩展文档,但到目前为止没有取得任何成果:

代码语言:javascript
复制
install.packages('Rcpp')
Rcpp.package.skeleton("GGIR", cpp_files = c("src/numUnpack.cpp","src/resample.cpp")
package_native_routine_registration_skeleton(".")
R CMD build .
R CMD check --no-manual ../GGIR_1.5-4.tar.gz
Status: OK
install.packages("~/GGIR/GGIR_1.5-4.tar.gz",dependencies=TRUE
* DONE (GGIR)

直到这里,一切似乎都进行得很好,因为包构建,我有一个源文件,我可以安装。但是,当我尝试使用依赖于c++代码的R函数时,我得到:

P = g.cwaread("/media/windows-share/testdata/testfile.cwa",start=1,end=10) Error in .Call("GGIR_numUnpack", PACKAGE = "GGIR", pack) : "GGIR_numUnpack" not available for .Call() for package "GGIR"

当直接使用Rcpp::sourceCpp('src/numUnpack.cpp')时,C++代码在我的机器上工作。

我详细介绍了我到目前为止在以下网站的调查:https://github.com/wadpac/GGIR/issues/6

会议信息:

代码语言:javascript
复制
sessionInfo()
R version 3.4.0 (2017-04-21)
Platform: x86_64-pc-linux-gnu (64-bit)
Running under: Ubuntu 16.04.2 LTS

Matrix products: default
BLAS: /usr/lib/libblas/libblas.so.3.6.0
LAPACK: /usr/lib/lapack/liblapack.so.3.6.0

locale:
 [1] LC_CTYPE=en_US.UTF-8       LC_NUMERIC=C               LC_TIME=nl_NL.UTF-8        LC_COLLATE=en_US.UTF-8    
 [5] LC_MONETARY=nl_NL.UTF-8    LC_MESSAGES=en_US.UTF-8    LC_PAPER=nl_NL.UTF-8       LC_NAME=C                 
 [9] LC_ADDRESS=C               LC_TELEPHONE=C             LC_MEASUREMENT=nl_NL.UTF-8 LC_IDENTIFICATION=C       

attached base packages:
[1] stats     graphics  grDevices utils     datasets  methods   base     

other attached packages:
[1] GGIR_1.5-4   Rcpp_0.12.10

loaded via a namespace (and not attached):
[1] compiler_3.4.0    tools_3.4.0       data.table_1.10.4
EN

回答 1

Stack Overflow用户

发布于 2021-06-19 19:30:43

我只是碰到了这个问题,上面的评论似乎没有多大帮助。起作用的是确保将useDynLib(<package>)语句添加到命名空间文件中。(请注意,<package>应该是包的名称。)

当然,如果您使用的是roxygen2,那么您就不能手工编辑命名空间文件。因此,您要做的是将useDynLib语句添加到usethis命名空间文件中。如下所示:

代码语言:javascript
复制
## usethis namespace: start
#' @importFrom Rcpp sourceCpp
#' @useDynLib <package>
## usethis namespace: end
NULL

然后重新生成文档,它将显示在名称空间中,如下所示:

代码语言:javascript
复制
import(readr)
import(readxl)
import(tibble)
import(tools)
importFrom(Rcpp,sourceCpp)
useDynLib(<package>)

如果没有将useDynLib(<package>)语句添加到命名空间中,则您的代码将无法找到您的Rcpp函数。

票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/43846017

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档