Вот мой тестовый код
#include <Rcpp.h>
using namespace Rcpp;
#include "/Users/jjunju/Documents/R/accum/accum.h"
// Below is a simple example of exporting a C++ function to R. You can
// source this function into an R session using the Rcpp::sourceCpp
// function (or via the Source button on the editor toolbar)
// For more on using Rcpp click the Help button on the editor toolbar
// [[Rcpp::export]]
int timesTwo(int x) {
return x * 2;
}
// [[Rcpp::export]]
void testExternalHeader(){
matrix <int> test(3,3);
test.Print();
}
// [[Rcpp::export]]
vector<vector <int> > testVector(){
vector<vector <int> > a;
a.resize(3); //rows
for(int i=0;i<3;i++){
a.resize(3); //cols
for(int j=0;j<3;j++){
a[i][j]=i*3+j;
}
}
return(a);
}
Вот кадр моей сессии Rstudio. Вы можете видеть, что моя функция testVector вылетает из Rstudio. У меня нет проблем с любыми другими функциями из моего внешнего заголовка. Только этот! : (
Ваш вектор a
содержит 3 пустых вектора, но вы относитесь к ним так, как будто их здесь нет:
a[i][j]=i*3+j; // a[i] has size 0 here
Этот доступ за пределами границ является неопределенным поведением. Причина в том, что это
a.resize(3); //cols
это не то, что вы думаете. Это по существу не имеет никакого эффекта, потому что уже размер 3 на данном этапе. a
Если вы хотите 3 на 3 вектор векторов инициализации следующим образом: a
vector<vector <int> > a(3, std::vector<int>(3));
resize
, но я не знаю, как вернуть вложенный вектор в R.