我正在使用程序bedtools,当我从我的操作系统(CentOS release 6.4
)调用它时它非常有效。
我尝试使用R system
调用此程序,它给了我错误:
bedtools: /usr/lib64/libstdc++.so.6: version `GLIBCXX_3.4.15' not found (required by bedtools)
我的R版本是:3.0.1 (2013-05-16) -- "Good Sport"
我该如何解决这个问题?
答案 0 :(得分:2)
无法从R中运行bedtools的原因是shell环境与R之外的环境不同。这是关于如何追踪差异的建议,但由于我无法访问实际的计算机它包含了大量的猜测。
您的系统上似乎有多个libstdc++
版本(需要运行bedtools)。运行以下命令以查看您拥有的那些:
$ locate libstdc++.so
/usr/lib/gcc/x86_64-redhat-linux/4.4.4/libstdc++.so
/usr/lib/gcc/x86_64-redhat-linux/4.4.4/32/libstdc++.so
/usr/lib64/libstdc++.so.6
/usr/lib64/libstdc++.so.6.0.13
然后对它们运行the following command以查看它们的版本是否不同
$ strings /usr/lib64/libstdc++.so.6 | grep GLIBC
GLIBCXX_3.4
GLIBCXX_3.4.1
GLIBCXX_3.4.2
GLIBCXX_3.4.3
GLIBCXX_3.4.4
GLIBCXX_3.4.5
GLIBCXX_3.4.6
GLIBCXX_3.4.7
GLIBCXX_3.4.8
GLIBCXX_3.4.9
GLIBCXX_3.4.10
GLIBCXX_3.4.11
GLIBCXX_3.4.12
GLIBCXX_3.4.13
GLIBC_2.2.5
GLIBC_2.3
GLIBC_2.4
GLIBC_2.3.2
GLIBCXX_FORCE_NEW
GLIBCXX_DEBUG_MESSAGE_LENGTH
如果您在其中一个中找到GLIBCXX_3.4.15
,请在R外的环境变量中搜索其目录,以查看它属于哪个目录:
$ set | grep "<path>"
当您找到合适的环境变量时,请按照@morispaa的建议,使用Sys.setenv
在R中添加路径。
Sys.setenv(<VARIABLE> = paste0("<path>:", Sys.getenv("<VARIABLE>"))
祝你好运!
我怀疑您在.bashrc
中设置了一些环境变量或类似的指出库的环境变量,也许您将其添加到$PATH
?
事实上,system
表示您在新shell会话中提供的语句,其中.bashrc
和类似的配置文件未来源。例如,我在HISTSIZE=1000
中设置了变量.bashrc
,我可以通过输入以下命令在bash中查看:
~$ echo $HISTSIZE
1000
但如果我在R中做同样的事情我什么也得不到
> system("echo $HISTSIZE")
另一方面,如果我设置它并在回应它之前我确实得到它(显然)
> system("export HISTSIZE=1000 && echo $HISTSIZE")
1000
但是system
电话完成后,如果我再做一次
> system("echo $HISTSIZE")