gpt4 book ai didi

macos - R中的sqldf包,查询数据框

转载 作者:行者123 更新时间:2023-12-04 06:30:19 24 4
gpt4 key购买 nike

我正在尝试使用 R 中的 sqldf 库重写一些代码,这应该允许我在数据帧上运行 SQL 查询,但是我遇到的问题是,每当我尝试运行查询时,R 似乎都在尝试查询我使用的实际真正的 MySQL db con 并通过我试图搜索的数据框的名称查找表。

当我运行这个时:

    sqldf("SELECT COUNT(*) from work.class_scores")

我得到:

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

所以,我想这可能是这个包 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'

!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)
)

最终,我想查询以获取 C 的值大于 2 的记录数,例如,我觉得这样做很舒服。唯一的问题是我不知道是否有另一种方法可以指定我查询的是数据框而不是实际的数据库。我在这里错过了一些非常愚蠢和容易的东西吗?

谢谢!

最佳答案

这个答案是从我之前的评论中转移过来的。

帖子和评论表明:

  • 即使加载了 RMySQL,也希望将 SQLite 与 sqldf 一起使用
  • 有一条关于 tcltk 丢失的消息
  • 存在以下问题:sqldf("select count(*) from work.class_scores")其中 work.class_scores 是一个数据框。

  • 在上面的 sqldf home page 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")

    编辑:

    添加了有关 sqldf 0.4-5 的信息。

    关于macos - R中的sqldf包,查询数据框,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/8219747/

    24 4 0
    Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
    广告合作:1813099741@qq.com 6ren.com