我正在创建一个包含Rcpp函数的R包,这取决于RcppArmadillo,所以我首先生成包骨架RcppArmadillo.package.skeleton.但是,当roxygenize我的包裹,它给我一个错误如下所示.
R代码
library(roxygen2)
library(RcppArmadillo)
library(Rcpp)
RcppArmadillo.package.skeleton(name = "prac_181206", example_code = FALSE)
roxygenize(package.dir = "prac_181206", roclets = "rd")
Run Code Online (Sandbox Code Playgroud)
错误
Error in getDLLRegisteredRoutines.DLLInfo(dll, addNames = FALSE) :
must specify DLL via a “DLLInfo” object. See getLoadedDLLs()
Run Code Online (Sandbox Code Playgroud)
花了一些时间后,我想通过删除文件中的.registration选项可以解决这个问题,NAMESPACE如下所示.
原始NAMESPACE文件
useDynLib(prac_181206, .registration=TRUE)
importFrom(Rcpp, evalCpp)
exportPattern("^[[:alpha:]]+")
Run Code Online (Sandbox Code Playgroud)
简而言之,在更改上面的第一行后useDynLib(prac_181206),它工作正常,但我不明白错误的含义以及我的解决方案的工作原理.
你能帮我解决这个问题吗?我很感激!
因为这是一个玩具示例,希望可以重现,我没有包含上面创建的任何其他功能man或src文件夹RcppArmadillo.package.skeleton.
仅供参考,有关我平台的相关信息是
我实验室中的 Window HPC 服务器没有 Rtools,所以我在获取 Rcpp 代码时收到了这条消息。
Warning message:
running command 'make -f "C:/PROGRA~1/R/R-32~1.2/etc/x64/Makeconf" -f "C:/PROGRA~1/R/R-32~1.2/share/make/winshlib.mk" SHLIB_LDFLAGS='$(SHLIB_CXXLDFLAGS)' SHLIB_LD='$(SHLIB_CXXLD)' SHLIB="sourceCpp_1.dll" WIN=64 TCLBIN=64 OBJECTS="MultiBayes.v1.o"' had status 127
Error in sourceCpp("./rcode/MultiBayes.v1.cpp") :
Error 1 occurred building shared library.
WARNING: The tools required to build C++ code for R were not found.
Please download and install the appropriate version of Rtools:
http://cran.r-project.org/bin/windows/Rtools/
Execution halted
Run Code Online (Sandbox Code Playgroud)
由于管理人员说在服务器中安装Rtools可能需要很长时间,我想知道是否有另一种方法可以避免此问题并在不安装Rtools的情况下运行Rcpp代码。
据我所知,构建一个包不会有帮助,因为它在安装时也使用了 Rtools。如有错误请指正。
我可以绕过这个来运行代码吗?
感谢您的任何意见和想法。
我有一个矩阵 X,它是由arma::vectorise函数矢量化的。在对转换后的向量 x 进行一些计算之后,我想将其重塑为arma::mat. 我试图.reshape在犰狳中使用函数,但它给了我这个错误。
注册码
// [[Rcpp::export]]
arma::mat vec2mat(arma::vec x, int nrow, int ncol){
return x.reshape(nrow, ncol);
}
Run Code Online (Sandbox Code Playgroud)
错误信息
no viable conversion from returned value of type 'void' to function return type 'arma::mat' (aka 'Mat<doubld>')
Run Code Online (Sandbox Code Playgroud)
有人能帮我找到处理这个问题的好方法吗?在这种情况下,我不确定应该为函数返回类型使用什么类型。如果您知道将向量转换为矩阵的另一种方法,那么它也很棒:)
提前致谢!