È possibile caricare il pickle in python e quindi esportarlo in R tramite il pacchetto python rpy2
(o simile). Dopo averlo fatto, i dati esisteranno in una sessione R collegata a python. Sospetto che ciò che vorresti fare successivamente sia usare quella sessione per chiamare R e salvare RDS in un file o disco RAM. Poi, nel RStudio si può leggere il file indietro nel. Guardate i pacchetti R rJython
e rPython
per i modi in cui si potrebbe innescare i comandi Python da R.
In alternativa, si potrebbe scrivere uno script python semplice per caricare i dati in Python (probabilmente usando uno dei pacchetti R sopra riportati) e scrivere un flusso di dati formattato su stdout. Quindi l'intera chiamata di sistema allo script (incluso l'argomento che specifica il pickle) può essere utilizzata come argomento a fread
nel pacchetto R data.table
. In alternativa, se si desidera mantenere le funzioni standard, è possibile utilizzare la combinazione di system(..., intern=TRUE)
e read.table
.
Come al solito, ci sono/molti/modi per skinare questo particolare gatto. I passi fondamentali sono:
- caricare i dati in pitone
- Express I dati a R (ad esempio, esportare l'oggetto tramite rpy2 o scrittura di testo formattato stdout con R pronto a riceverlo sull'altra estremità)
- serializzare i dati espressi in R ad una rappresentazione interna dei dati (ad esempio, esportare l'oggetto tramite rpy2 o
fread
)
- (opzionale) mettere i dati di quella sessione di R accessibili ad un'altra sessione R (cioè, il passo per chiudere il ciclo con rpy2, o se hai usato
fread
allora hai già finito).
È anche possibile esaminare 'fread' dal pacchetto' data.table'. Legge in file CSV sostanzialmente più veloce della base R (che è molto lento). Il test rapido con un file csv da 150 MB mostra 11 secondi con 'read.csv' e 2 secondi con' fread'. – Laterow
Perché non archiviare in un database come SQLite a cui sia R che Python possono leggere/scrivere? In effetti, questo è lo scopo di RDMS per fungere da archivio centrale per i programmi di utilizzo finale. – Parfait
@Parfait Se i dati sono grandi, la memorizzazione dei dati in un RDMS e in particolare la serializzazione su R sarà (relativamente lenta). Solo le mie osservazioni: velocità RDMS per questo tipo di operazione. Nella mia esperienza, lo streaming menzionato da Laterrow e nella mia risposta si rivelerà molto più veloce nella maggior parte dei casi con dataset di grandi dimensioni. L'uso di rpy2 potrebbe rivelarsi più lento dello streaming, ma ha il vantaggio (come RDMS) di mantenere i dati strutturati come stanno andando. – russellpierce