从Matlab中调用R.

时间:2013-07-31 22:31:02

标签: linux r matlab

我正在尝试从Matlab中运行一个R脚本,我得到了 和这张海报一样的错误: Calling R from Matlab

据我所知,情况是一样的,除了我的情况 系统正在运行LinuxMint(发布14 Nadia,内核 3.5.0-17-通用)并且该帖子中的解决方案不起作用 我。任何人都可以提出进一步的建议吗?我很难过。

就像上面帖子中的海报一样,我的调用是从shell开始的,但不是来自matlab。

r_script.R包含:

foo <- rnorm( 100 )
cat( sd( foo ), '\n' )
cat( mean( foo ), '\n' )

我在Matlab中得到的错误消息:

>> system( 'Rscript /tmp/r_script.R' )
Error in dyn.load(file, DLLpath = DLLpath, ...) : 
  unable to load shared object '/usr/lib/R/library/stats/libs/stats.so':
  /usr/local/MATLAB/R2013a/sys/os/glnxa64/libgfortran.so.3: version `GFORTRAN_1.4' not found (required by /usr/lib/liblapack.so.3)
During startup - Warning message:
package ‘stats’ in options("defaultPackages") was not found 
Error: could not find function "rnorm"
Execution halted

ans =

     1

>> !unset DYLD_LIBRARY_PATH; 
>> system( 'Rscript /tmp/r_script.R' )
Error in dyn.load(file, DLLpath = DLLpath, ...) : 
  unable to load shared object '/usr/lib/R/library/stats/libs/stats.so':
  /usr/local/MATLAB/R2013a/sys/os/glnxa64/libgfortran.so.3: version `GFORTRAN_1.4' not found (required by /usr/lib/liblapack.so.3)
During startup - Warning message:
package ‘stats’ in options("defaultPackages") was not found 
Error: could not find function "rnorm"
Execution halted

ans =

     1

2 个答案:

答案 0 :(得分:4)

好吧,Amro和DWin的回答让我指出了正确的方向,我已经解决了问题。问题是Matlab似乎包含了自己的libgfortran.so.3版本,与我系统上的版本相比,它必须是过时的(并且由R预期)。非常感谢Amro和DWin帮助我。

对于后来出现的任何可怜的灵魂:

我能够通过在Matlab的内部和外部运行/usr/lib/R/library/stats/libs/stats.so上的ldd来确定这一点。

!ldd /usr/lib/R/library/stats/libs/stats.so(来自Matlab内部)返回:

<snip>
libgfortran.so.3 => /usr/local/MATLAB/R2013a/sys/os/glnxa64/libgfortran.so.3 (0x00007faff0bbc000)
</snip>

和ldd /usr/lib/R/library/stats/libs/stats.so(来自shell)返回:

<snip>
libgfortran.so.3 => /usr/lib/x86_64-linux-gnu/libgfortran.so.3 (0x00007f3c9b308000)
</snip>

将系统libgfortran.so.3添加到Matlab的LD_LIBRARY_PATH(不是结尾)的开头解决了这个问题。来自Matlab内部:

>> setenv( 'LD_LIBRARY_PATH', strcat( '/usr/lib/x86_64-linux-gnu:', getenv( 'LD_LIBRARY_PATH' ) ) )
>> !/usr/bin/Rscript /tmp/r_script.R                                                               
0.8317391 
0.09262757 

答案 1 :(得分:1)

这可能是由MATLAB和R使用的库之间的版本不匹配引起的。您可以使用LD_PRELOAD来解决这个问题。在MATLAB内部和外部使用ldd来找出导致问题的原因......

在MATLAB中:

>> !ldd Rscript

在shell中:

$ ldd Rscript

顺便说一句Linux等同于现有的解决方案:

>> !unset LD_LIBRARY_PATH
>> system('...')

所以先尝试一下..

(请注意,我在Windows计算机上,因此未对任何解决方案进行测试)