在OS X Mavericks上安装RODBC/ROracle软件包

run*_*rds 20 oracle r rodbc

我一直在尝试安装一些软件包,如RODBC,ROracle或RGtk2 - 用于拨浪鼓.我真的很感激,如果有人可以帮助我解决这个问题,以便我可以在Mac上使用这些应用程序与小牛队和3.1.1 R

我对RODBC和RGtk2都有这种错误:

包'RGtk2'作为源包提供,但不作为二进制警告在install.packages:包'RGtk2'不可用(对于R版本3.1.1)

当我尝试使用type ='source'时,我可以下载或开始下载,但后来我收到这种错误信息......

install.packages中的警告:包'RODBC'的安装具有非零退出状态

jor*_*ran 30

这个答案将涵盖在OS X上安装RODBC和ROracle,特别是在Mavericks和更高版本上.

现在需要从源代码构建(编译)这两个包.这意味着您需要的第一件事就是下载XCode和相关的"命令行工具",以便您实际拥有编译器.你如何做到这一点已基本上改变了OS X/XCode的每个版本,但是如果你开始使用谷歌搜索,你可能会最终登陆这里.

一旦你有了......

RODBC

自OS X 10.9(Mavericks)Apple停止包含iODBC SQL头文件以及OS X上的R用户习惯安装的"命令行工具",以便从源代码构建R包.

因此,如果您此时尝试在Mavericks上从源代码构建RODBC,您应该得到如下错误:

configure:error:"找不到ODBC头sql.h和sqlext.h"

要解决此问题,您需要下载最新版本的iODBC(www.iodbc.org),然后解压缩该文件并将标题和库搜索路径设置为放置解压缩包的位置.如果您不知道如何设置搜索路径,可以将头文件(sql.h和sqlext.h)放在/usr/include目录中,将libiodbc.a文件放在/usr/lib目录中.

那你应该可以做到

install.packages("RODBC",type = "source")
Run Code Online (Sandbox Code Playgroud)

没有任何问题.据推测,这也适用于其他主要的开源ODBC项目unixODBC,但我还没有尝试过.

我在El Capitan上测试了这个(以及另一个答案中的自制方法),两者仍然有用.

ROracle

这更复杂.但是,可以在OS X上安装ROracle(我已经通过El Capitan对Mountain Lion进行了测试).由于ROracle依赖于Oracle Instant Client,因此任何平台都没有可用的二进制文件.有用于包装详细的安装说明这里.

对于OS X,我们需要(大部分)遵循Linux指令.

首先,按照Linuz说明中的指示下载相应的Oracle Instant Client以及SDK.

Linux安装说明提到从RPM安装客户端,这将把所有内容"放在正确的位置".我无法弄清楚是否应用了OS X,所以我只是在我创建的目录中解压缩客户端并将SDK放在该目录中/sdk.

然后,Linux安装说明指导我们为libclntsh.so.11.1创建符号链接.由于这是OS X,它实际上称为libclntsh.dylib.11.1.所以我们需要cd到我们解压缩客户端然后运行的目录

ln -s libclntsh.dylib.11.1 libclntsh.dylib
Run Code Online (Sandbox Code Playgroud)

在OS X上,我们然后设置DYLD_LIBRARY_PATH,而不是LD_LIBRARY_PATH:

export DYLD_LIBRARY_PATH=/scratch/instantclient_11_2:$DYLD_LIBRARY_PATH
Run Code Online (Sandbox Code Playgroud)

使用任何路径都适合您的机器.

我从来没有能够使用OCI_LIB环境变量来编译ROracle .相反,我使用了--with-oci-lib编译器标志选项:

R CMD INSTALL --configure-args='--with-oci-lib=/scratch/instantclient_11_2' ROracle_1.1-11.tar.gz
Run Code Online (Sandbox Code Playgroud)

再次使用任何路径和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’
Run Code Online (Sandbox Code Playgroud)

即使Sys.getenv("DYLD_LIBRARY_PATH")忠实地报告正确的路径,也会发生这种情况.

有一段时间,我一起破解了一个"解决方案",我创建了一个在启动时启动RStudio/RGui的shell脚本,只需记住随后通过它启动它们

open -a R.app
open -a RStudio.app
Run Code Online (Sandbox Code Playgroud)

这个问题显然与环境变量如何在OS X中为GUI启动的应用程序提供有关.通常情况下,我最终在StackOverflow上找到了解决方案.编辑 /etc/launchd.conf文件解决了这个问题,所以即使从Finder启动RStudio/RGui,ROracle现在也会加载.但要注意这里的是,/etc/launchd.conf在优胜美地解不再支持.该答案表明您现在需要设置一个启动plist文件,以便为launchctl启动时设置环境.

El Capitan更新了ROracle

我现在已经浏览了El Capitan中的这个坩埚,它的工作原理如上所述,但前提是你先禁用系统完整性保护!这样做相当快,并且可以通过Google轻松找到说明.

唷.


小智 25

如果你有自制软件,那将很容易.在终端,使用

brew install unixodbc
Run Code Online (Sandbox Code Playgroud)

在r控制台中,使用

install.packages("RODBC",type="source")
Run Code Online (Sandbox Code Playgroud)

希望它会有所帮助