我正在尝试在 Rcpp 中实现“与过去的耦合”算法。为此,我需要存储一个随机数矩阵,如果算法没有收敛,则创建一个新的随机数矩阵并存储它。这可能必须完成 10 次以上,直到收敛。
我希望我可以使用 aList
并动态更新它,就像我在 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 崩溃的情况下做到这一点的方法?我想我可以在这里以固定数量的元素启动列表,但在我的应用程序中,元素的数量是随机的。