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