將 .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 中描述的相同。