gpt4 book ai didi

r - 如何避免R中的内存限制

转载 作者:行者123 更新时间:2023-12-02 14:44:18 25 4
gpt4 key购买 nike

我正在尝试替换矩阵中的值,特别是“t”->1 和“f”->0,但我不断收到错误消息:

Error: cannot allocate vector of size 2.0 Mb
...
Reached total allocation of 16345Mb: see help(memory.size)

我使用的是具有 16GB 内存的 Win7 计算机,运行 RStudio 中的 64 位版本的 R。

我当前正在运行的是

a <- matrix( dataset, nrow=nrow(dataset), ncol=ncol(dataset), byrow=TRUE)
memory.size()
a[a=="t"] <- 1

其中数据集是(大约)525000x300 大小的数据框。 memory.size() 行给出的使用量不到 4GB,而 memory.limit() 为 16GB。为什么替换行需要这么多内存来执行?有没有什么方法可以在不达到内存限制的情况下进行替换(并且一般情况下是否有任何避免它的好技巧),如果是这样,是否会花费我很多时间来运行它?我对 R 还很陌生,所以我不知道它是否会根据我使用的数据类以及 R 分配内存的方式而有所不同...

最佳答案

当您调用此线路时

a[a=="t"] <- 1

R 必须创建一个全新的 bool 矩阵来索引 a。如果a很大,这个 bool 矩阵也会很大。

也许您可以尝试处理矩阵的较小部分,而不是尝试一次完成所有操作。

for (i in 1:ncol(a)){
ix = (a[:,i] == "t")
a[ix,i] = 1
}

它不快也不优雅,但它可能会解决内存问题。

关于r - 如何避免R中的内存限制,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/16344425/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com