有没有办法从sqldf查询中调用R函数?例如:
sqldf("select paste('Hello', 'World')")
或者,是否有一种方法在sqldf后面的SQLite引擎中定义自定义函数或存储过程?(我正在使用带有普通内存R数据框的sqldf;我没有连接到任何实际数据库。)
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/R 和R嵌入式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的信息。
RPostgreSQL
包(也可以使用sqldf
)。 - dickoa