2017-12-02 231 views
2

找到我建立一個Rpackage(稱爲myUtils),它使用一個文件cpp,在RStudio以下Hadley's manual。我cpp文件駐留在src目錄,運行後創建:devtools::use_rcpp(),我R目錄下我有一個名爲myUtils.R文件,用這些行:RCPP功能不能由R

#' myUtils: A package with various functions for my analyses 
#' 
#' 
#' @docType package 
#' @name myUtils 
#' @useDynLib myUtils 
#' @importFrom Rcpp sourceCpp 
NULL 

這是我的cpp文件:

// [[Rcpp::depends(RcppArmadillo, RcppEigen)]] 

#include <RcppArmadillo.h> 
#include <RcppEigen.h> 

using namespace Rcpp; 

// [[Rcpp::export]] 
SEXP armaMatMult(arma::mat A, arma::mat B){ 
    arma::mat C = A * B; 

    return Rcpp::wrap(C); 
} 

// [[Rcpp::export]] 
SEXP eigenMatMult(Eigen::MatrixXd A, Eigen::MatrixXd B){ 
    Eigen::MatrixXd C = A * B; 

    return Rcpp::wrap(C); 
} 

然後我跑devtools::document()裏面添加useDynLib(myUtils)NAMESPACE文件。然後我跑Build & Reload,其中成功完成,並創建了RccpExports.R文件中R目錄,在它與cpp功能,例如:

eigenMatMult <- function(A, B) { 
    .Call('_myUtils_eigenMatMult', PACKAGE = 'myUtils', A, B) 
} 

然後我試圖測試eigenMatMult,但它不認可:

set.seed(1) 
A <- matrix(rnorm(100), 10, 10) 
> eigenMatMult(A=A,B=A) 
Error: could not find function "eigenMatMult" 

和既不myUtils::

之前,當出現看起來像我失去了一些東西,但我無法弄清楚它是什麼。

幫助將不勝感激。

+1

我建議你向Wickham博士和/或他的bug網站提交錯誤報告。 RcppArmadillo的作品;將本書移開,從我們提供的RcppArmadillo.package.skeleton()開始,測試和記錄。乾杯。 –

+0

當然,你還需要_build_包'myUtils'和_load_它。你的問題不清楚你是否做過。 –

+0

我測試功能之前做的最後一件事是構建與刷新 - 這是在我的崗位 – dan

回答

5

的RCPP屬性機制在NAMESPACE文件本身不添加函數的出口指令。我們的示例使用通配符導出所有內容。

所以,如果你的函數是不可見的,做

  • 通話的一方或雙方通過:::myUtils:::eigenMatMult(A, A)
  • 添加eigenMatMult出口,手工或通過roxygen標籤