この回答では、OS X、特にMavericks以降へのRODBCとROracleのインストールについて説明します。
ここで、両方のパッケージをソースからビルド(コンパイル)する必要があります。つまり、最初に必要なのは、XCodeと関連する「コマンドラインツール」をダウンロードして、実際に使用できるようにすることです。 コンパイラ。これを行う方法は、基本的にOS X / XCodeのすべてのバージョンで変更されていますが、グーグルを開始すると、おそらくここに着陸することになります。
それが整ったら...
RODBC
OS X 10.9(Mavericks)以降、AppleはiODBC SQLヘッダーファイルと、OSXのRユーザーがソースからRpackagesをビルドするためにインストールするのに慣れている「コマンドラインツール」のインクルードを停止しました。
したがって、この時点でMavericksのソースからRODBCをビルドしようとすると、次のようなエラーが発生するはずです。
configure:エラー:「ODBCヘッダーsql.hおよびsqlext.hが見つかりません」
これを修正するには、最新バージョンのiODBC(www.iodbc.org)をダウンロードしてから、ファイルを解凍し、解凍したパッケージを配置した場所にヘッダーとライブラリの検索パスを設定する必要があります。検索パスの設定方法がわからない場合は、ヘッダーファイル(sql.hおよびsqlext.h)を/usr/include
に配置するだけです。 ディレクトリ、およびlibiodbc.a
/usr/lib
内のファイル ディレクトリ。
そうすればできるはずです
install.packages("RODBC",type = "source")
問題なく。おそらく、これは他の主要なオープンソースODBCプロジェクトであるunixODBCでも同様に機能しますが、私はそれを試していません。
私はこれ(および別の回答の自作方法)をエルキャピタンでテストしましたが、どちらもまだ機能しています。
ROracle
これはもっと複雑です。ただし、ROracleはOS Xにインストールできます(これは、ElCapitanを介してMountainLionでテストしました)。 ROracleはOracleInstantClientに依存しているため、どのプラットフォームでも使用できるバイナリはありません。パッケージの詳細なインストール手順はここにあります。
OS Xの場合、(ほとんど)Linuxの指示に従う必要があります。
まず、Linuzの手順に従って、適切なOracleInstantClientとSDKをダウンロードします。
Linuxのインストール手順には、RPMからクライアントをインストールすることが記載されています。これにより、すべてが「適切な場所」に配置されます。それがOSXにも当てはまるかどうかわからなかったので、作成したディレクトリでクライアントを解凍し、そのディレクトリ内の/sdk
にSDKを配置しました。 。
次に、Linuxのインストール手順で、libclntsh.so.11.1のシンボリックリンクを作成するように指示されます。これはOSXであるため、実際にはlibclntsh.dylib.11.1と呼ばれます。したがって、クライアントを解凍して実行するディレクトリにcdする必要があります
ln -s libclntsh.dylib.11.1 libclntsh.dylib
OS Xでは、DYLD_LIBRARY_PATH
を設定します。 、LD_LIBRARY_PATH
ではありません :
export DYLD_LIBRARY_PATH=/scratch/instantclient_11_2:$DYLD_LIBRARY_PATH
マシンに適したパスを使用します。
ROracleをOCI_LIB
でコンパイルすることができませんでした 環境変数。代わりに、--with-oci-lib
を使用しました コンパイラフラグオプション:
R CMD INSTALL --configure-args='--with-oci-lib=/scratch/instantclient_11_2' ROracle_1.1-11.tar.gz
ここでも、適切なパスとROracleバージョン番号を使用します。
tnsnames.oraファイルを使用してOracleデータベースに接続している場合は、そのファイルの場所を指すようにTNS_ADMIN環境変数も設定する必要があります。
最後の落とし穴:コマンドライン(ターミナルなど)からRを起動した場合にのみ、これがすべて機能することがわかります(私が行ったように)。具体的には、GUIからRGui.appまたはRStudio.appのいずれかを起動してから、library(ROracle)
を実行しようとした場合 何かの効果を誤解することになります
> 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’
これは、Sys.getenv("DYLD_LIBRARY_PATH")
でも発生します 正しいパスを忠実に報告します。
しばらくの間、起動時にRStudio / RGuiを起動するシェルスクリプトを作成する「ソリューション」を一緒にハックしましたが、その後は常に
を介して起動することを忘れないでください。open -a R.app
open -a RStudio.app
問題は明らかに、OS XでGUIで起動されたアプリケーションで環境変数を利用できるようにする方法に関係しています。通常の場合と同様に、私は最終的にStackOverflowで解決策を見つけました。 /etc/launchd.conf
を編集する ファイルがこの問題を解決したため、FinderからRStudio/RGuiareを起動した場合でもROracleがロードされるようになりました。ただし、ここで/etc/launchd.conf
に注意してください。 Yosemiteではソリューションはサポートされなくなりました。その答えは、launchctl
の環境を設定するためだけに、起動plistファイルを設定する必要があることを示唆しています。 起動時。
ROracle用のElCapitanアップデート
これでエルキャピタンのるつぼを調べましたが、上記のように機能しますが、システム整合性保護を無効にする場合に限ります。 最初!これを行うのはかなり迅速で、手順はGoogleから簡単に見つけることができます。
ふぅ。