我将一个csv文件加载到我的R中,当我尝试使用sqldf选择一些列时,它总是转到
Error in .local(drv, ...) :
Failed to connect to database: Error: Access denied for user
'User'@'localhost' (using password: NO)
Error in !dbPreExists : invalid argument type
我不知道如何修复它。
这是我的剧本:
library("RMySQL")
library(sqldf)
acs<-read.csv("getdata_data_ss06pid.csv",head = T)
sqldf("select pwgtp1 from acs where AGEP < 50")
答案 0 :(得分:13)
在使用RMySQL
时,您似乎不需要加载sqldf
库,因为您已经将数据读入内存,这似乎是问题所在:
library(RMySQL)
library(sqldf)
sqldf("select * from df limit 6")
.local(drv,...)出错: 无法连接到数据库:错误:无法通过socket&#39; /tmp/mysql.sock'连接到本地MySQL服务器; (2) 错误!dbPreExists:无效的参数类型
但是,如果RMySQL
库已分离,则sqldf
有效:
detach("package:RMySQL", unload=TRUE)
sqldf("select * from df limit 6")
# time type
# 1 1 type1
# 2 2 type1
# 3 3 type2
# 4 4 type1
# 5 5 type2
# 6 6 type1
答案 1 :(得分:6)
<强> TL; DR 强>
在调用RMySql
函数之前,显式将sqldf
默认驱动程序选项设置为SQLite
,而不是取消sqldf
包的解码:
options(sqldf.driver = "SQLite")
sqldf("select * from df limit 6")
<强>解释强>
如果没有明确定义,sqldf
包决定使用哪个DB驱动程序,如下所示:
如果未指定,则选中“dbDriver”选项,如果不是,则选中 然后设置sqldf检查RPostgreSQL,RMySQL或RH2是否 以该顺序加载并且驱动程序对应于第一个 发现是用的。如果没有加载,则使用“SQLite”。 DBNAME = NULL 导致默认使用。
在您的情况下,RMySql
已经加载,sqldf
将尝试使用MySQL DB并写入名为test
的模式。分离和卸载RMySQL
包是一种选择,但不是必需的。正如@GaborGrothendieck在评论中所提到的,最简单的解决方法是简单告诉sqldf
明确使用哪个DB驱动程序,即
sqldf("select * from df limit 6", drv="SQLite")
要始终不必添加drv="SQLite"
,您可以将会话的默认驱动程序永久设置为SQLite
:
options(sqldf.driver = "SQLite")