我刚刚下载了名为R
的{{1}}软件包,只是为了好玩,但到目前为止还没能正确运行它。当我尝试使用sqldf
数据集进行一些查询时:
iris
发生了错误sqldf("select * from iris limit 5")
所以我打开了它的帮助文档,然后运行以下查询:
Error in mysqlNewConnection(drv, ...) :
RS-DBI driver: (Failed to connect to database: Error: Access denied for user 'myUserName'@'localhost' (using password: NO)
)
Error in !dbPreExists : invalid argument type
错误消息与上述相同,这意味着我未能正确指定sqldf("select * from iris limit 5", user="myUser")
参数,因为错误消息未更改为user
。
那么如何修复它并正确运行呢?
当我使用Access denied for user 'myUser'@'localhost')
时,我会使用以下参数来建立连接。
RMySQL
我使用的是OS X 10.9.1并使用通过自制程序安装的MySQL 5.6,以及R版本3.0.2和sqldf版本0.4-6。
感谢。
答案 0 :(得分:3)
我首先要确保sqldf与SQLLite一起使用。
head(sqldf("select * from iris",drv='SQLite'))
接下来,我强烈建议您始终使用drv = param或显式设置sqldf.driver变量。依赖库(..)调用的顺序可能会导致错误。
如果您正在做一些简单的事情,您可以使用SQLLite,因为它很快并且几乎没有依赖关系(例如,如果您移动代码,则不必安装MySQL)。如果您正在使用日期,则SQLLite并不是很好,因此您可能希望使用MySQL。 正如评论和?sqldf底部的注释中所提到的,您需要使用[Client]部分为mysql设置my.cnf,以便包括sqldf在内的所有客户端都使用特定的登录名。还要确保dbname的设置如下:
options(sqldf.driver = "RMySQL")
options(RMySQL.dbname = "rtest")
head(sqldf("select * from iris"))
我没有找到一种在没有my.cnf的情况下使用MySQL的可靠方法。使用sqldf的显式连接对我来说也不起作用。我认为PostreSQL更好,因为你可以根据文档在R里面设置用户名等。
答案 1 :(得分:2)
我遇到了第一个错误,因为在我的情况下,sqldf默认使用mysql。然后,我把它切换到SQLite,它使用以下命令。
options(sqldf.driver = "SQLite")
答案 2 :(得分:2)
如果您已加载RMySQL包尝试分离RMySQL和sqldf包并加载sqldf package.its对我有效。请看下面的代码
detach(package:RMySQL)
detach(package:sqldf)
library(sqldf)
sqldf("select * from iris limit 5",user="sa", password = "root", host = "192.168.200.182", port=3377)