将 .tsv 文件导入为矩阵(基本 R)

许多人在制作文件路径时没有使用 file.path。但是如果你在 Windows,Mac 和 Linux 机器上工作,通常使用它来制作路径而不是 paste

FilePath <- file.path(AVariableWithFullProjectPath,"SomeSubfolder","SomeFileName.txt.gz")

Data <- as.matrix(read.table(FilePath, header=FALSE, sep ="\t"))

通常这对大多数人来说已经足够了。

有时它会发生矩阵维度如此之大,以至于在矩阵中读取时必须考虑内存分配过程,这意味着逐行读取矩阵。

以前面的例子为例,在这种情况下,FilePath 包含一个维度为 8970 8970 的文件,其中 79%的单元格包含非零值。

system.time(expr=Data<-as.matrix(read.table(file=FilePath,header=FALSE,sep=" ") ))

system.time 说 267 秒用于读取文件。

   user  system elapsed
265.563   1.949 267.563

同样,这个文件可以逐行读取,

FilePath <- "SomeFile"
connection<- gzfile(FilePath,open="r")
TableList <- list()
Counter <- 1
system.time(expr= while ( length( Vector<-as.matrix(scan(file=connection, sep=" ", nlines=1, quiet=TRUE)) ) > 0 ) {
    TableList[[Counter]]<-Vector
    Counter<-Counter+1
})
   user  system elapsed
165.976   0.060 165.941
close(connection)
system.time(expr=(Data <- do.call(rbind,TableList)))
   user  system elapsed
  0.477   0.088   0.565

还有 futile.matrix 包实现了 read.matrix 方法,代码本身将显示与示例 1 中描述的相同。