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