2014-10-06 19 views
19

Ho cercato di installare alcuni pacchetti come RODBC, ROracle o RGtk2 - usati per il sonaglio. Vorrei davvero grato se qualcuno potesse aiutarmi a risolvere questo problema in modo che ho potuto usare queste applicazioni su un Mac con Mavericks e con 3.1.1 RInstallazione di pacchetti RODBC/ROracle su OS X Mavericks

ottengo questo tipo di errore sia per RODBC e RGtk2:

package ‘RGtk2’ is available as a source package but not as a binary Warning in install.packages : package ‘RGtk2’ is not available (for R version 3.1.1)

Quando provo ad usare type = 'sorgente', posso scaricare o iniziare a scaricare, ma poi ho ottenere questo tipo di messaggio di errore ...

Attenzione in install.packages: installazione del pacchetto ' RODBC 'ha stato di uscita diverso da zero

+0

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

risposta

29

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.

+1

Non vedo il file "libiodbc.a" nella directory iODBC usando "find. -name" libiodbc * "" –

+0

@Super_John Ho trovato tutte le opzioni di download per iODBC confuso, è stato in una delle cose che ho scaricato, non riesco a ricordare quale al momento. Il metodo 'brew' qui sotto funziona anche e potrebbe essere più facile ... – joran

+0

concordato! Molto confuso. Alla fine ho fatto il percorso della birra, che ho trovato molto più facile. Apprezzo davvero il tuo aiuto. Tgif! –

0

Dovrai compilare il pacchetto dall'origine a mano. Se vai al sito RODBC, noterai che i file binari non sono disponibili per Mavericks. Scarica il pacchetto e segui le istruzioni per creare un pacchetto dal sorgente. These are Windows instructions ma l'idea generale è la stessa. Avrete bisogno di tutti i pacchetti del sistema operativo necessari che vengono utilizzati durante il processo di generazione di un particolare pacchetto.

+0

'costruzione a mano' --- questo significa che devo sostituire la mia installazione corrente con la nuova installazione di R? – runningbirds

+0

@ user3788557 costruire a mano significa che è necessario (ti sto dando parole chiave per la ricerca per ora) una toolchain di compilazione per il tuo sistema operativo e compilare il pacchetto dal sorgente. Questo è spesso fatto usando 'R CMD build'. Ti suggerisco di cercare "creare pacchetto r" usando il tuo motore di ricerca preferito. Non importa, @joran ha già risposto ... –

24

Se hai un homebrew, sarebbe facile. Nel terminale, utilizzare

brew install unixodbc 

In console r, utilizzare

install.packages("RODBC",type="source") 

auguriamo che contribuiscano

+0

Ha funzionato come un incantesimo su El Captain. Più semplice della soluzione proposta da joran – jomuller

2

Se stai usando MacPorts, fare questo:

sudo port install unixODBC 

Poi , crea (o, se esiste, modifica) un file nella tua home directory

~/.R/Makevars 

che dovrebbe contenere una linea

CFLAGS += -I/opt/local/include 

Quindi, è possibile installare RODBC da

install.packages("RODBC",type="source") 

In sostanza, quanto sopra

  • Installa le librerie ei file header
  • necessari
  • Racconta R dove trovarli
  • Installa RODBC.