我正在尝试在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 line 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 noob的人来说仍然非常困惑。 Runnin read.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
和RSQLite
之外,还有更好的方法可以将10 GB制表符分隔的文件读入R吗?我已经尝试过data.table
和ff
。