2013-05-08 14 views
7

C'è un modo per chiamare le funzioni R dalle query sqldf? Per esempio.Chiama le funzioni R dalle query sqldf

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

Oppure, c'è un modo per definire funzioni personalizzate o stored procedure all'interno del motore SQLite dietro sqldf? (Sto usando sqldf con semplici vecchi frame di dati R in memoria, non mi sto collegando a nessun vero database.)

+0

Perché utilizzare le funzioni R anziché le funzioni SQLite integrate? – joran

+0

Penso che la risposta sia semplicemente, no. – nograpes

+0

joran: in realtà, la funzione particolare che mi interessa è digest() dal pacchetto digest R, per calcolare gli hash MD5 –

risposta

12

1) Funzioni esistenti Per prima cosa assicurarsi che la funzione desiderata non sia già disponibile. Ad esempio il codice in questione è direttamente supportato in SQL già:

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

2) RSQLite.extfuns ha tutte le funzioni SQL dalla versione di sqlite di SQL più un grande numero di funzioni definite dall'utente dal box nel pacchetto RSQLite.extfuns (che viene caricato automaticamente da sqldf).

3) Altre estensioni caricabili Le funzioni di eventuali estensioni caricabili sqlite esistenti possono essere caricate tramite la funzione SQL sqlite load_extension(). per esempio. vedi these extensions

4) funzioni personalizzate funzioni personalizzate possono essere aggiunti al SQLite ma devono essere scritti in C.

5) PostgreSQL & sqldf sqldf supporta non solo SQLite, ma anche h2, PostgreSQL e MySQL. postgresql è particolarmente potente in questo senso. Vedi this link from the postgresql documentation Vedere anche Pl/R e R Embedded Postgres package.

6) H2 & sqldf Il database H2 è supportato da sqldf. Come sqlite H2 è incluso nel pacchetto R driver RH2 in modo da non dover installare un database separato; tuttavia, devi installare Java. Ha una funzione di hash SHA256 incorporata (chiamata hash).

7) miscelare sqldf & R sql e R può essere miscelato in questo modo:

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

8) Altro Vai a questa SO question and answers

UPDATE: Aggiunto informazioni H2.

Problemi correlati