是否有一种分配长度为n的Rcpp列表的方法,该列表中的每个元素都将填充一个NumericMatrix,但是每个NumericMatrix的大小可以更改?
我有一个使用std :: list和push_back()进行操作的想法,但是列表的大小可能很大,我想避免从函数返回时创建列表的额外副本的开销。 。
下面的R代码给出了我希望做什么的想法:
myvec = function(n) {
x = vector("list", n)
for (i in seq_len(n)) {
nc = sample(1:3, 1)
nr = sample(1:3, 1)
x[[i]] = matrix(rbinom(nc * nr, size = 1, prob = 0.5),
nrow = nr, ncol = nc)
}
x
}
这可能会导致类似:
> myvec(2)
[[1]]
[,1]
[1,] 0
[2,] 1
[[2]]
[,1] [,2] [,3]
[1,] 0 1 0
[2,] 0 1 1
[根本问题,Rcpp对象是R对象,这控制了我的R的内存管理,在此内存中,调整大小非常昂贵:完整副本。
因此,当我执行与您相似的任务时,大小可能会更改或未知,我经常使用不同的数据结构-STL给我们带来了很多-并且仅在return
步骤转换为R(cpp)结束。
这里的魔鬼像往常一样。个人资料,实验... ...>