簡體   English   中英

如何在R中創建大型數據幀,先創建或不創建矩陣,然后將其轉換為data.frame?

[英]How to create a large data frame in R with or without creating a matrix first and then converting it to a data.frame?

我需要創建一個具有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

基本上,您將構建一個包含要構建的數據框架的每一列的列表(我使用replicate simplify=FALSE使用replicate構建了該列表),然后使用do.calldata.frame函數data.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

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM