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?initExtension
One には、sqlite のバージョンの SQL のすべての SQL 関数に加えて、RSQLite パッケージに リストされているすぐに使用できる多数のユーザー定義関数があります。
3) その他の ロード可能な拡張機能 既存の sqlite ロード可能な拡張機能の関数は、sqlite SQL 関数を介してロードできますload_extension()
。たとえば、これらの拡張機能を参照してください
4) カスタム関数 カスタム関数は SQLite に追加できますが、C で作成する必要があります。
5) PostgreSQL & sqldf sqldf は sqlite だけでなく、h2、postgresql、mysql もサポートしています。postgresql は、この点で特に強力です。postgresql ドキュメントのこのリンクを参照してくださいPl/R and R Embedded Postgres package も参照してください。
6) H2 & sqldf H2 データベースは sqldf でサポートされています。sqlite H2 と同様に、RH2 ドライバー R パッケージに含まれているため、別のデータベースをインストールする必要はありません。ただし、Java をインストールする必要があります。組み込みの SHA256 ハッシュ関数 (ハッシュと呼ばれます) があります。
7) mix sqldf & R sql と R は次のように混在させることができます:
library(digest)
transform(sqldf("select * from BOD"), digest = sapply(demand, digest))
8) その他 このSO の質問と回答を参照してください
更新: H2 に関する情報を追加しました。