2013-05-08 96 views
7

是否有方法从sqldf查询调用R函数?例如。从sqldf查询调用R函数

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

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

+0

为什么要使用R函数而不是内置的SQLite函数? – joran 2013-05-08 22:31:45

+0

我认为答案很简单,不。 – nograpes 2013-05-08 22:33:58

+0

joran:实际上,我感兴趣的特定函数是摘要R包中的摘要(),以计算MD5哈希值 – 2013-05-08 22:35:51

回答

12

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

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

2)RSQLite.extfuns一个从源码的版本的SQL加上大量的用户的所有的SQL函数定义的函数出来的在RSQLite.extfuns包中(由sqldf自动加载)。

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 H2数据库由sqldf支持。像sqlite H2包含在RH2驱动程序R包中,因此您不必安装单独的数据库;但是,您必须安装Java。它有一个内置的SHA256哈希函数(称为哈希)。

7)混合sqldf &ř SQL和R可以混合像这样:

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

8)其他见本SO question and answers

UPDATE:上H2添加信息。