7

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

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

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

4

1 に答える 1

13

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 に関する情報を追加しました。

于 2013-05-08T23:15:15.177 に答える