我正在使用Rcppand编写 R 包RcppEigen,但在矩阵切片和子设置方面遇到问题。我需要从一个较大的方阵中得到一个非对角方阵
该Eigen::MatrixXd切片方法似乎是问题。使用Eigen::seq()方法在 R 中根本不起作用,因为“命名空间 'Eigen' 中没有名为 'seq' 的成员”,并且该MatrixXd.block(i, j, n, n)方法导致崩溃,某些大(ish)值是n. 有时它工作得很好,但如果我增加大小,它会导致致命的崩溃。
这是 C++ 代码的示例:
// [[Rcpp::depends(RcppEigen)]]
#include <iostream>
#include <RcppEigen.h>
using namespace Rcpp;
using Eigen::Map;
using Eigen::MatrixXd;
typedef Map<MatrixXd> MapMatd;
// [[Rcpp::export]]
List crosspart_worker_cpp(const MapMatd& Vij, ...){
int n = Vij.cols()/2;
/* ... some arbitrary code ... */
// extract sub-block of varcovar matrix (only unique pairs)
MatrixXd Vsub = Vij.block(1, n + 1, n, …Run Code Online (Sandbox Code Playgroud)