从sqldf查询中调用R函数

7
有没有办法从sqldf查询中调用R函数?例如:
sqldf("select paste('Hello', 'World')")

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


joran:实际上,我感兴趣的特定函数是来自digest R包的digest()函数,用于计算MD5哈希值。 - Michael Malak
好的,那我同意 @nograpes 的观点。 - joran
如果你想在SQL查询中调用R代码,那么请使用PostgreSQL加上pl/r。如果你想从R中执行此操作,请检查RPostgreSQL包(也可以使用sqldf)。 - dickoa
那么,我想解决方法就是在我的数据框中创建额外的列,例如 mydf["hashedpassword"] <- digest(mydf$password)。 - Michael Malak
糟糕,需要一个sapply:mydf["hashedpassword"] <- sapply(mydf$password, digest(x)) - Michael Malak
显示剩余2条评论
1个回答

13

1) 现有函数 首先确保你想要的函数已经存在。例如,问题中的代码已经直接在 SQL 中得到了支持:

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

2) RSQLite.extfuns 该包含sqlite SQL的所有SQL函数,还有大量用户定义函数,可以在RSQLite包中的?initExtension列表中直接使用。

3) 其他可加载扩展 任何已存在的sqlite可加载扩展中的函数都可以通过sqlite SQL函数load_extension()来加载。例如,请参见这些扩展

4) 自定义函数 可以向SQLite添加自定义函数,但必须用C语言编写。请参见此链接

5) PostgreSQL和sqldf sqldf不仅支持sqlite,还支持h2、postgresql和mysql。其中postgresql在这方面特别强大。请参见postgresql文档中的此链接,以及Pl/RR嵌入式Postgres包

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

7) 混合使用sqldf和R SQL和R可以像这样混合使用:

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

8) 其他 请参见此 SO问题和答案

更新: 添加有关H2的信息。


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接