2015-06-26 31 views
2

我有LD數據,有時候是原始輸出文件PLINK(注意空格 - 用於輸出漂亮,注意前導和尾隨空格):使用相同的命令快速讀取不同類型的數據,更好的分離器猜測

write.table(read.table(text=" 
CHR_A  BP_A   SNP_A CHR_B   BP_B   SNP_B   R2 
1 154834183  rs1218582  1 154794318  rs9970364 0.0929391 
1 154834183  rs1218582  1 154795033  rs56744813  0.10075 
1 154834183  rs1218582  1 154797272  rs16836414  0.106455 
1 154834183  rs1218582  1 154798550 rs200576863 0.0916789 
1 154834183  rs1218582  1 154802379  rs11264270  0.176911 ",sep="x"), 
      "Type1.txt",col.names=FALSE,row.names=FALSE,quote=FALSE) 

還是很好的製表符分隔的文件:

write.table(read.table(text=" 
CHR_A BP_A SNP_A CHR_B BP_B SNP_B R2 
1 154834183 rs1218582 1 154794318 rs9970364 0.0929391 
1 154834183 rs1218582 1 154795033 rs56744813 0.10075 
1 154834183 rs1218582 1 154797272 rs16836414 0.106455 
1 154834183 rs1218582 1 154798550 rs200576863 0.0916789 
1 154834183 rs1218582 1 154802379 rs11264270 0.176911", sep=" "), 
      "Type2.txt",col.names=FALSE,row.names=FALSE,quote=FALSE,sep="\t") 

read.csv適用於這兩種類型的數據:

read.csv("Type1.txt", sep="") 
read.csv("Type2.txt", sep="") 

FREAD僅適用於類型2:

fread("Type1.txt") 
fread("Type2.txt") 

文件很大,有幾百萬行,因此不能使用read.csv選項。有沒有辦法讓fread猜想更好?其他包裝/功能建議?

我可以使用readLines然後猜測文件的類型,或使用系統調用然後fread整理文件,但這會增加我試圖避免的開銷。

編輯: SessionInfo

R version 3.2.0 (2015-04-16) 
Platform: x86_64-w64-mingw32/x64 (64-bit) 
Running under: Windows 7 x64 (build 7601) Service Pack 1 
+0

另一個問題,我注意到'read.csv/read.table'工作的'fread'失敗。你在使用Linux嗎? – akrun

+0

@akrun看編輯,我在窗戶上。你是否暗示我不會在linux上遇到這個問題? – zx8754

+1

我只是說用'awk'通過管道工作。即''fread(「awk'{$ 1 = $ 1} 1'Type1.txt」)' – akrun

回答

1

修正了devel版本v1.9.5。無論是使用devel的(/升級)或等待一段時間它打CRAN爲v1.9.6:

require(data.table) # v1.9.5+ 
ans <- fread("Type1.txt") 
# CHR_A  BP_A  SNP_A CHR_B  BP_B  SNP_B  R2 
# 1:  1 154834183 rs1218582  1 154794318 rs9970364 0.0929391 
# 2:  1 154834183 rs1218582  1 154795033 rs56744813 0.1007500 
# 3:  1 154834183 rs1218582  1 154797272 rs16836414 0.1064550 
# 4:  1 154834183 rs1218582  1 154798550 rs200576863 0.0916789 
# 5:  1 154834183 rs1218582  1 154802379 rs11264270 0.1769110 

fread()已獲得strip.white(默認值= TRUE)之中其他參數/​​ bug修復。請參閱項目頁面上的README文件以獲取更多信息。


類型也被正確識別。

sapply(ans, class) 
#  CHR_A  BP_A  SNP_A  CHR_B  BP_B  SNP_B   R2 
# "integer" "integer" "character" "integer" "integer" "character" "numeric" 
0

你可以嘗試包readr。可在Cran或github

閱讀小插曲,如果這會幫助你。我發現它正確讀取大多數csv,包括日期和不需要指定stringsAsFactors = False。

但做閱讀用fread()

+0

「fread()通過自動猜測分隔符來保存你的工作,文件是否有標題,默認跳過多少行以及Readr **強制你提供這些參數**」 - 我想避免提供分隔符,並且需要函數來正確地猜測它。 – zx8754

2

我不認爲fread有能力本身比較。然而,系統命令選項會起作用,額外的複製成本通常非常值得:

fread("powershell \"cat Type1.txt | % { $_ -replace ' +',',' } | % { $_ -replace '^,|,$','' }\"") 
# CHR_A  BP_A  SNP_A CHR_B  BP_B  SNP_B  R2 
#1:  1 154834183 rs1218582  1 154794318 rs9970364 0.0929391 
#2:  1 154834183 rs1218582  1 154795033 rs56744813 0.1007500 
#3:  1 154834183 rs1218582  1 154797272 rs16836414 0.1064550 
#4:  1 154834183 rs1218582  1 154798550 rs200576863 0.0916789 
#5:  1 154834183 rs1218582  1 154802379 rs11264270 0.1769110 
相關問題