Я пытаюсь реализовать алгоритм «связи с прошлым» в Rcpp. Для этого мне нужно сохранить матрицу случайных чисел, и если алгоритм не сошелся, создайте новую матрицу случайных чисел и сохраните ее. Возможно, это придется сделать более 10 раз или около того, пока не сойдется.
Я надеялся, что смогу использовать List
и динамически обновлять его, как в R. На самом деле я был очень удивлен, что это немного сработало, но у меня возникали ошибки всякий раз, когда размер списка становился большим. Кажется, это имеет смысл, так как я не выделил необходимую память для дополнительных элементов списка, хотя я не очень хорошо знаком с C++ и не уверен, что проблема в этом.
Вот пример того, что я пробовал. однако имейте в виду, что это, вероятно, приведет к сбою сеанса R:
library("Rcpp")
cppFunction(
includes = '
NumericMatrix RandMat(int nrow, int ncol)
{
int N = nrow * ncol;
NumericMatrix Res(nrow,ncol);
NumericVector Rands = runif(N);
for (int i = 0; i < N; i++)
{
Res[i] = Rands[i];
}
return(Res);
}',
code = '
void foo()
{
// This is the relevant part, I create a list then update it and print the results:
List x;
for (int i=0; i<10; i++)
{
x[i] = RandMat(100,10);
Rf_PrintValue(wrap(x[i]));
}
}
')
foo()
Кто-нибудь знает способ сделать это без сбоя R? Думаю, здесь я мог бы инициировать список с фиксированным количеством элементов, но в моем приложении количество элементов является случайным.