我正在處理12個大型數據文件,所有這些文件都在3到5 GB之間懸停,因此我轉向使用RSQLite進行導入和初始選擇。在這種情況下給出一個可重複的例子是很困難的,所以如果你能想出任何東西,那就太好了。Read.table和dbWriteTable導致不同的輸出?
如果我拿一小部分數據,讀它,並將其寫入到一個表,我得到正是我想要的:
con <- dbConnect("SQLite", dbname = "R2")
f <- file("chr1.ld")
open(f)
data <- read.table(f, nrow=100, header=TRUE)
dbWriteTable(con, name = "Chr1test", value = data)
> dbListFields(con, "Chr1test")
[1] "row_names" "CHR_A" "BP_A" "SNP_A" "CHR_B" "BP_B" "SNP_B" "R2"
> dbGetQuery(con, "SELECT * FROM Chr1test LIMIT 2")
row_names CHR_A BP_A SNP_A CHR_B BP_B SNP_B R2
1 1 1 1579 SNP-1.578. 1 2097 SNP-1.1096. 0.07223050
2 2 1 1579 SNP-1.578. 1 2553 SNP-1.1552. 0.00763724
如果我在我所有的數據直接讀取到表,但是,我的列沒有正確分隔。我都試過月=「」和SEP =「\ t」的,但都給予同樣的柱分離
dbWriteTable(con, name = "Chr1", value ="chr1.ld", header = TRUE)
> dbListFields(con, "Chr1")
[1] "CHR_A_________BP_A______________SNP_A__CHR_B_________BP_B______________SNP_B___________R
我可以告訴大家,它顯然是某種delimination問題的,但我已經用盡了我的想法如何解決它。有沒有人遇到過這個?
*編輯,更新: 它好像這個工程:
n <- 1000000
f <- file("chr1.ld")
open(f)
data <- read.table(f, nrow = n, header = TRUE)
con_data <- dbConnect("SQLite", dbname = "R2")
while (nrow(data) == n){
dbWriteTable(con_data, data, name = "ch1", append = TRUE, header = TRUE)
data <- read.table(f, nrow = n, header = TRUE)
}
close(f)
if (nrow(data) != 0){
dbWriteTable(con_data, data, name = "ch1", append = TRUE)
}
雖然我不能完全弄清楚爲什麼剛剛經歷寫的SQLite表是一個問題。可能是一個記憶問題。
如果'read.table(f,nrow = 100,header = TRUE)'爲100,是否確切地知道它在哪個值停止工作?當您剛剛讀取100行時,您是否比較了'data'的'str()'?導入可能有問題。但是,由於您沒有提供[可重現的示例](http://stackoverflow.com/questions/5963269/how-to-make-a-great-r-reproducible-example),因此無法確切知道什麼是繼續。我們只能猜測。 – MrFlick 2014-09-22 16:29:47
read.table(f,nrow = 100,header = TRUE)可以工作,並且我得到100行完全符合我的預期。由於文件非常龐大,我無法提供可重複使用的示例,並且這似乎是導致錯誤的原因。否則我可以提供文件,但不能用較小的集重新創建此錯誤。 – MHtaylor 2014-09-22 19:00:49