我正在尝试在 R 中运行以下命令,以便将本地制表符分隔文件读取为 SQLite 数据库:
library(RSQLite)
banco <- dbConnect(drv = "SQLite",
dbname = "data.sqlite")
dbWriteTable(conn = banco,
name = "Tarefas",
value = "data.tsv",
sep = "\t",
dec = ",",
na.strings = c("", NA),
row.names = FALSE,
header = TRUE)
但是,上面的语句会产生以下错误:
read.table 中的错误(fn,sep = sep,header = header,skip = skip,nrows = nrows,:由多个实际参数匹配的形式参数“na.strings”
这让我觉得我无法na.strings
明确地作为read.delim
参数传递。在没有这个参数的情况下运行dbWriteTable
会给我“RS-DBI 驱动程序:(RS_sqlite_import: ./data.tsv 第 17696 行预期有 20 列数据,但找到了 18 列)”。这是可以理解的,因为我检查了第 17696 行,它几乎完全是空白的。
另一个测试运行使用sqldf
也给了我一个错误:
> read.csv2.sql(file = "data.tsv",
+ sql = "CREATE TABLE Tarefas AS SELECT * FROM FILE LIMIT 5",
+ dbname = "data.sqlite",
+ header = TRUE,
+ row.names = FALSE)
Error in sqliteExecStatement(con, statement, bind.data) :
RS-DBI driver: (error in statement: no such table: FILE)
我认为这是一个不相关的错误,但对于像我这样绝对是 SQL 菜鸟的人来说仍然非常混乱。相反, Runninread.csv.sql
给了我这个错误:
Error in read.table(fn, sep = sep, header = header, skip = skip, nrows = nrows, : more columns than column names
那么有没有办法通过na.strings = c("", NA)
呢dbWriteTable
?除了sqldf
和之外,还有更好的方法将 10 GB 制表符分隔的文件读入 RRSQLite
吗?我已经尝试过data.table
和ff
。