我正在处理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