Questa risposta coprirà l'installazione di RODBC e ROracle su OS X, in particolare su Mavericks e versioni successive.
Entrambi i pacchetti ora devono essere compilati (compilati) dalla sorgente. Ciò significa che la prima cosa di cui hai bisogno è scaricare XCode e gli "strumenti da riga di comando" associati in modo tale che in realtà abbia un compilatore. Il modo in cui lo fai è cambiato praticamente con ogni versione di OS X/XCode, ma se avvii su Google probabilmente finirai con l'atterraggio dello here.
Una volta che avete che al posto ...
RODBC
Dal OS X 10.9 (Mavericks) Apple ha smesso compresi i file di intestazione iODBC SQL insieme con gli "strumenti della riga di comando" che R gli utenti su OS X sono abituati all'installazione per creare pacchetti R dall'origine.
Quindi, se si tenta di costruire RODBC dai sorgenti su Mavericks, a questo punto si dovrebbe ottenere un errore del tipo:
configure: error: "ODBC headers sql.h and sqlext.h not found"
Per risolvere questo problema, è necessario scaricare l'ultima versione di iODBC (www.iodbc. org), , quindi decomprimere il file e impostare i percorsi di ricerca dell'intestazione e della libreria nella posizione in cui si inserisce il pacchetto decompresso. Se non sai come impostare per i percorsi di ricerca, puoi semplicemente inserire i file di intestazione (sql.h e sqlext.h) nella directory /usr/include
, e il file nella directory /usr/lib
.
Poi si dovrebbe essere in grado di fare
install.packages("RODBC",type = "source")
senza problemi. Presumibilmente questo funzionerebbe anche con l'altro progetto ODBC open source, unixODBC, ma non l'ho provato.
Ho provato questo (e il metodo homebrew in un'altra risposta) su El Capitan ed entrambi funzionano ancora.
ROracle
questo è più complicato. Tuttavia, ROracle può essere installato su OS X (l'ho provato su Mountain Lion attraverso El Capitan). Poiché ROracle si basa su Oracle Instant Client, non sono disponibili binari per la piattaforma . Vi sono istruzioni di installazione dettagliate per il pacchetto here.
Per OS X, è necessario (principalmente) seguire le istruzioni di Linux.
Innanzitutto, scaricare l'appropriato Oracle Instant Client, nonché l'SDK, come indicato nelle istruzioni di Linuz.
Le istruzioni di installazione di Linux menzionano l'installazione del client da un RPM, che posizionerà tutto "nel posto giusto". Non ero in grado di capire se fosse applicato anche per OS X, quindi ho semplicemente decompresso il client in una directory che ho creato e inserito l'SDK all'interno di quella directory in /sdk
.
Le istruzioni di installazione di Linux ci indirizzano quindi a creare un collegamento simbolico per libclntsh.so.11.1. Dal momento che questo è OS X, in realtà si chiama libclntsh.dylib.11.1. Quindi abbiamo bisogno di cd per la directory in cui abbiamo scompattato il cliente e quindi eseguire
ln -s libclntsh.dylib.11.1 libclntsh.dylib
Su OS X, abbiamo quindi impostare il DYLD_LIBRARY_PATH
, non il LD_LIBRARY_PATH
:
export DYLD_LIBRARY_PATH=/scratch/instantclient_11_2:$DYLD_LIBRARY_PATH
usando qualunque percorso è corretto per la tua macchina.
Non sono mai riuscito a compilare ROracle con una variabile di ambiente OCI_LIB
. Invece, ho usato l'opzione di bandiera --with-oci-lib
compilatore:
R CMD INSTALL --configure-args='--with-oci-lib=/scratch/instantclient_11_2' ROracle_1.1-11.tar.gz
nuovo utilizzando qualsiasi percorso e la versione ROracle numero è adeguato.
Se ci si sta connettendo a un database Oracle utilizzando un file tnsnames.ora, è inoltre necessario impostare una variabile di ambiente TNS_ADMIN in modo che punti al percorso di tale file.
Un ultimo trucchetto: è possibile trovare (come ho fatto) che tutto funzioni solo se si avvia R dalla riga di comando (ad esempio Terminal). In particolare, se si avvia o RGui.app o RStudio.app dalla GUI, e quindi tenta di eseguire library(ROracle)
si otterrà un errore dicendo qualcosa per l'effetto di
> library("ROracle")
Error in dyn.load(file, DLLpath = DLLpath, ...) :
unable to load shared object '/Library/Frameworks/R.framework/Versions/3.1/Resources/library/ROracle/libs/ROracle.so':
dlopen(/Library/Frameworks/R.framework/Versions/3.1/Resources/library/ROracle/libs/ROracle.so, 6): Library not loaded: /ade/b/3071542110/oracle/rdbms/lib/libclntsh.dylib.11.1
Referenced from: /Library/Frameworks/R.framework/Versions/3.1/Resources/library/ROracle/libs/ROracle.so
Reason: image not found
Error: package or namespace load failed for ‘ROracle’
Ciò accadrà anche se Sys.getenv("DYLD_LIBRARY_PATH")
fedelmente riporta il percorso corretto.
Per un po ', ho messo insieme una "soluzione", dove ho creato uno script di shell che ha lanciato RStudio/RGui all'avvio, e abbiamo dovuto ricordarsi di lanciarli sempre successivamente tramite
open -a R.app
open -a RStudio.app
Il problema apparentemente ha a che fare con il modo in cui le variabili di ambiente sono rese disponibili nella GUI per lanciare applicazioni in OS X. Come di solito accade, ho trovato la soluzione su StackOverflow. La modifica del file /etc/launchd.conf
ha risolto questo problema, quindi ROracle ora viene caricato anche quando RStudio/RGui viene avviato dal Finder. Nonostante la nota here, la soluzione /etc/launchd.conf
non è più supportata in Yosemite. Questa risposta suggerisce che ora è necessario impostare un file plist di avvio solo per impostare l'ambiente per launchctl
all'avvio.
El Capitan Aggiornamento per ROracle
ora ho passato attraverso il crogiolo su questo a El Capitan e funziona come descritto sopra, ma solo se si disattiva Integrità del sistema di protezione primo! Ciò è abbastanza rapido e le istruzioni sono facilmente reperibili tramite Google.
Phew.
Si noti che le istruzioni di installazione per RGtk2 dicono che richiede l'installazione separata delle librerie GTK, e che questo "può essere un dispendio di tempo e apparentemente indiretta processo che prevede l'installazione di numerose sotto-librerie." Quindi attenzione. – joran