我正在尝试使用R中的sqldf库重写一些代码,这应该允许我在数据帧上运行SQL查询,但是我遇到了一个问题,每当我尝试运行查询时,R似乎试图查询我使用的实际真正的MySQL数据库骗局,并通过我试图搜索的数据框的名称查找表.
当我运行这个:
sqldf("SELECT COUNT(*) from work.class_scores")
Run Code Online (Sandbox Code Playgroud)
我明白了:
mysqlNewConnection(drv,...)出错:RS-DBI驱动程序:(无法连接到数据库:错误:无法通过套接字'/tmp/mysql.sock'连接到本地MySQL服务器(2))
当我尝试使用两种不同的方式指定位置时(第一个形成googlecode页面,第二个应该是基于文档的权利)
> sqldf("SELECT COUNT(*) from work.class_scores", sqldf.driver = "SQLite")
Error in sqldf("SELECT COUNT(*) from work.class_scores", sqldf.driver = "SQLite") :
unused argument(s) (sqldf.driver = "SQLite")
> sqldf("SELECT COUNT(*) from work.class_scores", drv = "SQLite")
Loading required package: tcltk
Loading Tcl/Tk interface ... Error : .onLoad failed in loadNamespace() for 'tcltk', details:
call: dyn.load(file, DLLpath = DLLpath, ...)
error: unable to load shared library '/Library/Frameworks/R.framework/Resources/library/tcltk/libs/x86_64/tcltk.so':
dlopen(/Library/Frameworks/R.framework/Resources/library/tcltk/libs/x86_64/tcltk.so, 10): Library not loaded: /usr/local/lib/libtcl8.5.dylib
Referenced from: /Library/Frameworks/R.framework/Resources/library/tcltk/libs/x86_64/tcltk.so
Reason: image not found
Error: require(tcltk) is not TRUE
Run Code Online (Sandbox Code Playgroud)
所以,我认为这可能是这个包tcltk的一个问题,我从来没有听说过,所以我试着照顾它并发现一些问题:
> install.packages("tcltk")
Warning in install.packages :
argument 'lib' is missing: using '/Users/michaeldiscenza/Library/R/2.11/library'
Warning in install.packages :
package ‘tcltk’ is not available
> install.packages("tcltk2", lib="/Applications/RStudio.app/Contents/Resources/R/library")
trying URL 'http://lib.stat.cmu.edu/R/CRAN/bin/macosx/leopard/contrib/2.11/tcltk2_1.1-5.tgz'
Content type 'application/x-gzip' length 940835 bytes (918 Kb)
opened URL
==================================================
downloaded 918 Kb
The downloaded packages are in
/var/folders/Y1/Y1gdz9tKFiSnWsGP9+BDcU+++TI/-Tmp-//RtmpL07KTL/downloaded_packages
> library("tcltk")
Loading Tcl/Tk interface ... Error : .onLoad failed in loadNamespace() for 'tcltk', details:
call: dyn.load(file, DLLpath = DLLpath, ...)
error: unable to load shared library '/Library/Frameworks/R.framework/Resources/library/tcltk/libs/x86_64/tcltk.so':
dlopen(/Library/Frameworks/R.framework/Resources/library/tcltk/libs/x86_64/tcltk.so, 10): Library not loaded: /usr/local/lib/libtcl8.5.dylib
Referenced from: /Library/Frameworks/R.framework/Resources/library/tcltk/libs/x86_64/tcltk.so
Reason: image not found
Error: package/namespace load failed for 'tcltk'
Run Code Online (Sandbox Code Playgroud)
!dbPreExists出错:参数类型无效
在这里,我真的不知道问题是什么,我需要移动一下吗?
我尝试的另一种方法是在对数据框架对象运行查询之前,设置我的数据库连接,以便R看起来而不是尝试连接到实际的本地MySQL数据库.但那没用.回到套接字的问题(即使我可以查询本地数据库本身没有任何问题.
> con <- sqldf()
Error in mysqlNewConnection(drv, ...) :
RS-DBI driver: (Failed to connect to database: Error: Can't connect to local MySQL server through socket '/tmp/mysql.sock' (2)
)
Run Code Online (Sandbox Code Playgroud)
最后,我想查询以获取C的值大于2的记录数,例如,我觉得这样做很舒服.唯一的问题是我不知道是否有另一种方式来指定我查询的是数据帧而不是实际的数据库.我错过了一些非常愚蠢和容易的东西吗?
谢谢!
G. *_*eck 11
这个答案已从我之前的评论中转移过来.
帖子和评论表明:
即使加载了RMySQL,也希望将SQLite与sqldf一起使用
有一条关于tcltk丢失的消息
有一个问题:数据框sqldf("select count(*) from work.class_scores")
在哪里work.class_scores.
在sqldf主页 FAQ#7上面的地址(1)和FAQ#5地址(2).(3)由于dot是一个SQL运算符,因此需要引用这些数据框名称,或者更改其名称以删除点.
下面我们提供实现上述三种解决方案的可重复示例.
该sqldf.driver选项用于强制使用SQLite,即使加载了RMySQL.
关于tcltk,有三种方法:(i)该gsubfn.engine选项使用R代码代替tcltk,这样就不需要tcltk包.请参阅下面的示例代码 (ii)交替安装tcltk.(iii)当sqldf 0.4-4是当前版本时,问这个问题,但是现在sqldf 0.4-5已经注意到已经添加了额外的tcltk包检测,这使得它更有可能在没有用户的情况下自动处理所有这些设置任何选项,而无需安装tcltk.因此,最简单的解决方案可能是升级到sqldf 0.4-5或更高版本.
我们引用其中有一个点的数据框名称,或者用不包含点的名称替换数据框名称:
options(sqldf.driver = "SQLite") # as per FAQ #7 force SQLite
options(gsubfn.engine = "R") # as per FAQ #5 use R code rather than tcltk
library(RMySQL)
library(sqldf)
work.class_scores <- BOD # BOD is built in
sqldf("select count(*) from 'work.class_scores'")
# or
work_class_scores <- work.class_scores
sqldf("select count(*) from work_class_scores")
Run Code Online (Sandbox Code Playgroud)
编辑:
添加了有关sqldf 0.4-5的信息.
| 归档时间: |
|
| 查看次数: |
7924 次 |
| 最近记录: |