1

我正在尝试从 Matlab 中运行 R 脚本,我得到与此海报相同的错误: Calling R from Matlab

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

就像上面线程中的海报一样,我的调用是在 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
4

2 回答 2

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 
于 2013-08-01T17:35:24.567 回答
1

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

在 MATLAB 中:

>> !ldd Rscript

在外壳中:

$ ldd Rscript

顺便说一句,与现有解决方案等效的 Linux 将是:

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

所以先试试吧。。

(请注意,我在 Windows 机器上,因此没有测试任何解决方案)

于 2013-08-01T13:39:09.930 回答