Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/r/70.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
&引用;“不是矩阵”;在R中运行Rcpp cde时出错_R_Matrix_Rcpp_Armadillo - Fatal编程技术网

&引用;“不是矩阵”;在R中运行Rcpp cde时出错

&引用;“不是矩阵”;在R中运行Rcpp cde时出错,r,matrix,rcpp,armadillo,R,Matrix,Rcpp,Armadillo,我试图在我的Rcpp代码中使用nearPD函数。虽然看起来很琐碎,但我不明白为什么它不起作用。这是我的代码的简化版本: #include <RcppArmadillo.h> // [[Rcpp::depends(RcppArmadillo)]] using namespace arma; using namespace Rcpp; // [[Rcpp::export]] mat eBsc(mat R){ Rcpp::Environment Matrix("package:Mat

我试图在我的Rcpp代码中使用
nearPD
函数。虽然看起来很琐碎,但我不明白为什么它不起作用。这是我的代码的简化版本:

#include <RcppArmadillo.h>
// [[Rcpp::depends(RcppArmadillo)]]

using namespace arma;
using namespace Rcpp;
// [[Rcpp::export]]
mat eBsc(mat R){
  Rcpp::Environment Matrix("package:Matrix"); 
    Rcpp::Function nearPD = Matrix["nearPD"];
    Rcpp::List PD=nearPD(R);
    mat P = PD["mat"];
return P;   
  }
#包括
//[[Rcpp::depends(RcppArmadillo)]]
使用arma;
使用名称空间Rcpp;
//[[Rcpp::导出]]
材料eBsc(材料R){
Rcpp::环境矩阵(“包:矩阵”);
Rcpp::函数nearPD=矩阵[“nearPD”];
Rcpp::List PD=nearPD(R);
mat P=PD[“mat”];
返回P;
}
但当我想测试它时,例如,在R中如下所示:

A <- matrix(1, 3,3); A[1,3] <- A[3,1] <- 0
d<-eBsc(A)

A你错了。列表的第一个元素不是矩阵。它是包矩阵中定义的S4对象。这项工作:

#include <Rcpp.h>

using namespace Rcpp;
// [[Rcpp::export]]
S4 eBsc(NumericMatrix R){
  Rcpp::Environment Matrix("package:Matrix"); 
  Rcpp::Function nearPD = Matrix["nearPD"];
  Rcpp::List PD=nearPD(R);
  S4 P = PD["mat"];
  return P;   
}

/*** R
library(Matrix)
A <- matrix(1, 3,3); A[1,3] <- A[3,1] <- 0
eBsc(A)
  */
#包括
使用名称空间Rcpp;
//[[Rcpp::导出]]
S4 eBsc(数字矩阵R){
Rcpp::环境矩阵(“包:矩阵”);
Rcpp::函数nearPD=矩阵[“nearPD”];
Rcpp::List PD=nearPD(R);
S4 P=PD[“垫”];
返回P;
}
/***R
图书馆(矩阵)

但是如果我想在其他计算中使用这个矩阵,它就不起作用了。例如,如果我有一个mat或NumericMatrix a,即使我使用“as.matrix”命令,“a*P”的情况也不起作用。有没有办法将P(作为S4对象)转换为Rcpp代码中合适类型的数据?是的,我在回答中解释了如何将其转换为矩阵。
> library(Matrix)

> A <- matrix(1, 3,3); A[1,3] <- A[3,1] <- 0

> eBsc(A)
3 x 3 Matrix of class "dpoMatrix"
          [,1]      [,2]      [,3]
[1,] 1.1035534 0.8535534 0.1035534
[2,] 0.8535534 1.2071068 0.8535534
[3,] 0.1035534 0.8535534 1.1035534