如何有效地将一个大矩阵(20k x 20k)从~3-4 GB的txt文件加载到Rstudio中?[子图提取]

如何有效地将一个大矩阵(20k x 20k)从~3-4 GB的txt文件加载到Rstudio中?[子图提取],r,matrix,sparse-matrix,correlation,R,Matrix,Sparse Matrix,Correlation,我有3个大矩阵数据集,其中包含我正在处理的数据集的相关数据,代表3个不同的网络 矩阵如下所示: 它是19370 x 19370,其值由表格(“\t”)分隔。 因为它是一个相关矩阵,唯一好的值(和我感兴趣的值)在上对角线矩阵上,所以只有不为NA的值。 上对角线矩阵上的NA被视为无相关性 我尝试了以下算法: processFile <- function(filepath) { rows <- vector() cols <- vector() values <-

我有3个大矩阵数据集,其中包含我正在处理的数据集的相关数据,代表3个不同的网络

矩阵如下所示:

它是19370 x 19370,其值由表格(“\t”)分隔。 因为它是一个相关矩阵,唯一好的值(和我感兴趣的值)在上对角线矩阵上,所以只有不为NA的值。 上对角线矩阵上的NA被视为无相关性

我尝试了以下算法:

processFile <- function(filepath)
{
  rows <- vector()
  cols <- vector()
  values <- vector()
  counter <- 1
  while (TRUE)
    {
      start_time <- Sys.time()
      line <- read_lines(filepath,skip=counter,n_max=1)
      if ( length(line) == 0 )
      {
        break
      }
      
      line <- strsplit(line,split="\t",fixed=T)
      for(i in counter+2:length(line[[1]]))
      {
        if(!is.na(suppressWarnings(as.numeric(line[[1]][i]))))
        {
          rows <- append(rows,counter+1)
          cols <- append(cols,i-1)
          values <- append(values,as.numeric(line[[1]][i]))
        }
      }
      end_time <- Sys.time()
      diff <- end_time-start_time
      print(paste("Progress: ",round(counter/19369*100,2),"%"))
      print(paste("Line: ", counter))
      print(diff)
      counter <- counter+1
  }
  #M <- list(rows,cols,values)
  M <- sparseMatrix(i=rows,j=cols,x=values,dims=c(counter-1,counter-1))
  return(M)
}

processFile您的内存有限吗?如果没有,请使用
data.table::fread
一次导入所有数据。所有这些
读取行
strsplit
追加
天生都很慢。哇,我在fread之前试过,但没用,我不记得为什么了。现在我又试了一次,它在不到10秒内就看完了。非常感谢你!是否可以将其转换为矩阵或更好的稀疏矩阵?我想把它用作邻接矩阵。另外,我有16gb内存,转换为矩阵可能有点慢,需要太多内存,但请尝试
as.matrix
。你可以开发一些聪明的东西,自己转换成稀疏矩阵,或者四处寻找解决方案。可能有用(但我还没有测试过)。