2013-05-08 5 views
7

sqldfクエリからR関数を呼び出す方法はありますか?例えば。sqldfクエリからR関数を呼び出す

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

または、sqldfの背後にあるSQLiteエンジン内にカスタム関数またはストアドプロシージャを定義する方法はありますか? (普通のメモリ内のRデータフレームでsqldfを使用していますが、実際のデータベースに接続していません)

+0

組み込みのSQLite関数ではなくR関数を使う理由は何ですか? – joran

+0

答えは簡単だと思います。 – nograpes

+0

joran:実際に私が興味を持っているのは、MD5ハッシュを計算するためのダイジェストRパッケージからのdigest()です。 –

答えて

12

1)既存の関数最初に、必要な機能が使用できないことを確認します。たとえば、問題のコードは、直接、既にSQLでサポートされています。

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

2)RSQLite.extfuns一つはsqliteののSQLのバージョンプラスのうち、ユーザ定義関数の数が多いから、すべてのSQL機能を持っていますRSQLite.extfunsパッケージ(sqldfによって自動的に読み込まれます)の中のボックス。

3)その他のロード可能な拡張子既存のsqliteロード可能な拡張機能の関数は、sqlite SQL関数load_extension()を使用してロードできます。例えばthese extensions

4)カスタム関数カスタム関数は、SQLiteのに追加することができますが、それらはin Cを記述する必要がありますを参照してください。

5)PostgreSQLの& sqldf sqldfだけsqliteのないサポートだけでなく、PostgreSQLとMySQLをh2を。 postgresqlはこの点で特に強力です。 this link from the postgresql documentationを参照してください。Pl/RおよびR Embedded Postgres packageも参照してください。

6)H2 & sqldf H2データベースはsqldfでサポートされています。 RH2ドライバのRパッケージには、sqlite H2のようにH2が含まれているので、別のデータベースをインストールする必要はありません。ただし、Javaをインストールする必要があります。これは組み込みのSHA256ハッシュ関数(ハッシュと呼ばれる)を持っています。

7)& R SQL sqldf混ぜるとRは次のように混合することができる:H2上の情報を追加:

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

8)その他このSO question and answers

UPDATEを参照してください。

関連する問題