Read.table和dbWriteTable的输出是否不同?

Read.table和dbWriteTable的输出是否不同?,r,sqlite,read.table,R,Sqlite,Read.table,我正在处理12个大数据文件,它们都在3到5GB之间徘徊,所以我转向RSQLite进行导入和初始选择。在这种情况下,给出一个可复制的例子是很困难的,所以如果你能想出什么,那就太好了 若我取一小组数据,读入并写入一个表,我就能得到我想要的: con <- dbConnect("SQLite", dbname = "R2") f <- file("chr1.ld") open(f) data <- read.table(f, nrow=100, header=TRUE) dbWr

我正在处理12个大数据文件,它们都在3到5GB之间徘徊,所以我转向RSQLite进行导入和初始选择。在这种情况下,给出一个可复制的例子是很困难的,所以如果你能想出什么,那就太好了

若我取一小组数据,读入并写入一个表,我就能得到我想要的:

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
我可以说,这显然是某种脱罪问题,但我已经用尽了我的想法如何解决它。以前有人碰到过这个吗

*编辑、更新: 这似乎是可行的:

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)
}

n我猜您的大文件导致了可用内存问题(请参阅docs for read.table下的内存使用情况)。向我们展示chr1.ld的前几行会很有帮助(在*nix系统上,您只需说“head-n5chr1.ld”就可以得到前五行)。
如果是内存问题,那么您可以尝试将该文件作为一种解决方法,而不是将其整个吞下。
确定或估计chr1.ld中的行数(在*nix系统上,称为“wc-lchr1.ld”)。
假设您的文件有100000行

`sip.size = 100
for (i in seq(0,100000,sip.size)) {
    data <- read.table(f, nrow=sip.size, skip=i, header=TRUE)
    dbWriteTable(con, name = "SippyCup", value = data, append=TRUE)
}`
`sip.size=100
用于(i在序列中(0100000,sip.尺寸)){

数据如果
read.table(f,nrow=100,header=TRUE)
对于100,您是否确切知道它在哪个值停止工作?您是否比较了
str()
数据
当您只读取100行而不是所有行时?导入可能有问题。但是,由于您没有提供,因此无法确定发生了什么。我们只能猜测.read.table(f,nrow=100,header=TRUE)工作正常,我得到了100行,完全符合我的预期。我不能提供一个可复制的示例,因为文件非常大,这似乎是导致错误的原因。我可以提供其他文件,但不能用较小的集重新创建此错误。我想我想出了一些非常类似的方法,尽管我认为这是可行的。我的数据大约是53百万行,所以这可能是问题所在
`sip.size = 100
for (i in seq(0,100000,sip.size)) {
    data <- read.table(f, nrow=sip.size, skip=i, header=TRUE)
    dbWriteTable(con, name = "SippyCup", value = data, append=TRUE)
}`