我正试图将C++代码添加到我的R包中。我的包代码在Github:https://github.com/wadpac/GGIR上。我一直在阅读写R扩展文档,但到目前为止没有取得任何成果:
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
会议信息:
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发布于 2021-06-19 19:30:43
我只是碰到了这个问题,上面的评论似乎没有多大帮助。起作用的是确保将useDynLib(<package>)语句添加到命名空间文件中。(请注意,<package>应该是包的名称。)
当然,如果您使用的是roxygen2,那么您就不能手工编辑命名空间文件。因此,您要做的是将useDynLib语句添加到usethis命名空间文件中。如下所示:
## usethis namespace: start
#' @importFrom Rcpp sourceCpp
#' @useDynLib <package>
## usethis namespace: end
NULL然后重新生成文档,它将显示在名称空间中,如下所示:
import(readr)
import(readxl)
import(tibble)
import(tools)
importFrom(Rcpp,sourceCpp)
useDynLib(<package>)如果没有将useDynLib(<package>)语句添加到命名空间中,则您的代码将无法找到您的Rcpp函数。
https://stackoverflow.com/questions/43846017
复制相似问题