R中的内存分配:写入数组片复制整个数组

R中的内存分配:写入数组片复制整个数组,r,R,我很难理解如何绕过“错误:无法分配大小为7.5 Gb的向量”和数组。当我尝试写入数组的一个片段时,R似乎在复制内存中的整个数组。我唯一能想到的就是重写C++中的代码。但是,在我走这条路之前,在R中有没有一个本地的方法来处理这个问题?下面是一个最小的工作示例,它抛出了上述错误。虽然如果您的计算机上的内存大于或小于8GB,那么您需要更改代码来说明这一点。我真的很感谢你的帮助 memory.limit(size = 8 * 2^10) theta_init <- runif( n = 1

我很难理解如何绕过“错误:无法分配大小为7.5 Gb的向量”和数组。当我尝试写入数组的一个片段时,R似乎在复制内存中的整个数组。我唯一能想到的就是重写C++中的代码。但是,在我走这条路之前,在R中有没有一个本地的方法来处理这个问题?下面是一个最小的工作示例,它抛出了上述错误。虽然如果您的计算机上的内存大于或小于8GB,那么您需要更改代码来说明这一点。我真的很感谢你的帮助

memory.limit(size = 8 * 2^10)
theta_init <- runif(
    n = 100,
    min = 1,
    max = 10
)
theta_init <- theta_init / sum(theta_init)
theta <- array(
    data = theta_init,
    dim = c(10, 10, 1e7)
)
format(
    x = object.size(theta),
    units = "GB"
)
theta[ , , 10] <- theta[, , 9]
内存限制(大小=8*2^10)

theta_init对于默认数据类型,没有其他方法可以对整个(连续)向量进行写时复制。但您可以将数据存储在外部(通过编程方式,使用外部指针对象)或(比如)内存中的Redis数据库中。这样你可以更好地控制更新。谢谢!我很感激这个@Dirkedelbuettel!我可能会用你的Rcpp包来解决这个问题,所以多谢!一种更便宜的方法可能是不使用一个大向量,而是使用几个(小得多)向量的列表。然后更新也只复制您正在编写的片段。另外,C++当然也有助于STL <代码> STD::vector < /代码>,它具有不同的设计和行为。