2017-12-03 73 views
1

我试图自动将CSV文件写入RSQLite数据库。问题自动将CSV导入RSQLite数据库

我这样做是通过索引csvFiles来实现的,这是存储在环境中的data.frame变量列表。

我似乎无法找出为什么当我手动输入,但不是当我试图指数namevalue领域我dbWriteTable()代码工作完全正常。

### CREATE DB ### 
mydb <- dbConnect(RSQLite::SQLite(),"") 

# FOR LOOP TO BATCH IMPORT DATA INTO DATABASE 
for (i in 1:length(csvFiles)) { 
    dbWriteTable(mydb,name = csvFiles[i], value = csvFiles[i], overwrite=T) 
    i=i+1 
} 

# EXAMPLE CODE THAT SUCCESSFULLY MANUAL IMPORTS INTO mydb 
dbWriteTable(mydb,"DEPARTMENT",DEPARTMENT) 

当我运行的循环以上,我给出的这个错误:

"Error in file(file, "rt") : cannot open the connection 
In addition: Warning message: 
In file(file, "rt") : 
    cannot open file 'DEPARTMENT': No such file or directory 

# note that 'DEPARTMENT' is the value of csvFiles[1] 

这里是csvFilesdput输出:

c("DEPARTMENT", "EMPLOYEE_PHONE", "PRODUCT", "EMPLOYEE", "SALES_ORDER_LINE", 
"SALES_ORDER", "CUSTOMER", "INVOICES", "STOCK_TOTAL") 

我研究这个错误,它似乎与我的工作目录有关;然而,我并不真正理解要改变什么,因为我甚至不试图从我的电脑上操作文件,只是我的环境中已经有了data.frames。

请帮忙!

+0

你有'值= csvFiles [I]'用大写'I'?你也不需要'i = i + 1'。多说一点,我们需要像'dput(head(csvFiles))'这样的东西。 – vaettchen

+0

Hi @vaettchen,感谢您的支持。带有大写字母'I'的拼写错误是我浏览器中的一个修正。这不是实际的代码。任何想法为什么我的for循环不工作? – Morgan

+0

我想你的变量'csvFiles'有些问题。如果你可以发布'dput()'出来?看起来不像我的工作目录错误。 csv文件没有扩展名(没有'DEPARTMENT.csv'? – vaettchen

回答

0

只需使用get()说法是要传递一个字符串值,当一个数据帧对象的预期。注意您的手动版没有DEPARTMENT引用

# FOR LOOP TO BATCH IMPORT DATA INTO DATABASE 
for (i in seq_along(csvFiles)) { 
    dbWriteTable(mydb,name = csvFiles[i], value = get(csvFiles[i]), overwrite=T) 
} 

另外,考虑建立一个名为dataframes的列表,mget和循环的逐元素列表的名称和DF元素之间用Map

dfs <- mget(csvfiles) 

output <- Map(function(n, d) dbWriteTable(mydb, name = n, value = d, overwrite=T), names(dfs), dfs) 
+0

这正是我寻找的信息,谢谢! – Morgan