gpt4 book ai didi

r - 如何在 R 中创建一个大数据框,无论是否先创建矩阵,然后将其转换为 data.frame?

转载 作者:行者123 更新时间:2023-12-02 08:37:34 24 4
gpt4 key购买 nike

我需要创建一个具有80000 行和80000 列的矩阵。但是,在阅读 Rbloggers 后,我知道矩阵中的元素数量不能超过 2^31 - 1。我的特定算法避免此问题的计划是使用数据框而不是矩阵。有没有一种方法可以创建尺寸为 80000 x 80000 的空数据框,而无需先创建矩阵,然后使用 as.data.frame 将其转换为 data.frame,如下所示?

myMatrix <- matrix(0, ncol = 40, nrow = 90)
myDataFrame <- as.data.frame(myMatrix)

最佳答案

您可以构建一个大小为 80,000 x 80,000 的空数据框,如下所示:

dat <- do.call(data.frame, replicate(80000, rep(FALSE, 80000), simplify=FALSE))
dim(dat)
# [1] 80000 80000
dat[1,1]
# [1] FALSE
dat[80000,80000]
# [1] FALSE

基本上,您构建一个包含要构建的数据框的每一列的列表(我使用 replicatesimplify=FALSE 构建了列表),然后构建一个使用 do.calldata.frame 函数将数据帧导出。

一些注意事项:

  1. 您最好有几十 GB 的内存,以便有机会将其装入计算机的内存中(我的 R 进程显示分配的内存为 48 GB)。
  2. 这会比矩阵分配慢得多;对于 8000 x 8000 的情况,数据帧构建需要 36 秒,矩阵构建需要 1 秒。数据完整数据帧分配花了 54 分钟。
  3. 如果您的数据稀疏,这是一个浪费的选择,您应该使用稀疏矩阵。

尽管在 64 位 Linux(R 版本 3.2.0)中分配这种大小的矩阵并没有失败,但基本操作似乎不起作用:

x <- matrix(0, nrow=80000, ncol=80000)
dim(x)
# [1] 80000 80000
x[1,1]
# Error: long vectors not supported yet: subset.c:733

关于r - 如何在 R 中创建一个大数据框,无论是否先创建矩阵,然后将其转换为 data.frame?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/30677540/

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