【问题标题】:Call R functions from sqldf queries从 sqldf 查询调用 R 函数
【发布时间】:2013-05-03 07:23:44
【问题描述】:

有没有办法从 sqldf 查询中调用 R 函数?例如

sqldf("select paste('Hello', 'World')")

或者,有没有办法在 sqldf 后面的 SQLite 引擎中定义自定义函数或存储过程? (我正在使用带有普通旧内存 R 数据帧的 sqldf;我没有连接到任何实际的数据库。)

【问题讨论】:

  • 为什么要使用 R 函数而不是内置的 SQLite 函数?
  • 我认为答案很简单,不会。
  • joran:实际上,我感兴趣的特定函数是摘要 R 包中的 digest(),用于计算 MD5 哈希
  • 好的,那我同意@nograpes。
  • 如果您想在 SQL 查询中调用 R 代码,请使用 PostreSQL 和 pl/r,如果您想从 R 中执行此操作,请检查 RPostgreSQL 包(也可以使用 sqldf)跨度>

标签: r sqlite sqldf


【解决方案1】:

1) 现有功能 首先确保您想要的功能尚不可用。例如,SQL 已经直接支持问题中的代码:

> sqldf("select 'Hello' || ' ' || 'world' ")
  'Hello' || ' ' || 'world'
1               Hello world

2) RSQLite.extfuns 一个拥有来自 sqlite 版本 SQL 的所有 SQL 函数以及 RSQLite 包中?initExtension 中列出的大量用户自定义函数。 p>

3) 其他可加载扩展 任何现有 sqlite 可加载扩展中的函数都可以通过 sqlite SQL 函数load_extension() 加载。例如见these extensions

4) 自定义函数 自定义函数可以添加到 SQLite 但必须写成in C

5) PostgreSQL & sqldf sqldf 不仅支持 sqlite,还支持 h2、postgresql 和 mysql。 postgresql 在这方面特别强大。见this link from the postgresql documentation 另见Pl/RR Embedded Postgres package

6) H2 & sqldf sqldf 支持 H2 数据库。就像 sqlite H2 包含在 RH2 驱动程序 R 包中一样,因此您不必安装单独的数据库;但是,您必须安装 Java。它有一个内置的 SHA256 哈希函数(称为哈希)。

7) 混合 sqldf & R sql 和 R 可以这样混合:

library(digest)
transform(sqldf("select * from BOD"), digest = sapply(demand, digest))

8) 其他SO question and answers

更新:添加了关于 H2 的信息。

【讨论】:

    猜你喜欢
    • 2012-01-03
    • 2018-12-19
    • 1970-01-01
    • 1970-01-01
    • 2015-03-11
    • 2015-11-07
    • 1970-01-01
    • 1970-01-01
    • 2023-01-10
    相关资源
    最近更新 更多