分配n个NumericMatrix的Rcpp列表

问题描述 投票:0回答:1

是否有一种分配长度为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
r rcpp
1个回答
1
投票

[根本问题,Rcpp对象是R对象,这控制了我的R的内存管理,在此内存中,调整大小非常昂贵:完整副本。

因此,当我执行与您相似的任务时,大小可能会更改或未知,我经常使用不同的数据结构-STL给我们带来了很多-并且仅在return步骤转换为R(cpp)结束。

这里的魔鬼像往常一样。个人资料,实验... ...>

© www.soinside.com 2019 - 2024. All rights reserved.