如何在没有X11的服务器上运行R,并避免损坏依赖关系。

31

我正在一台配置了大量内存但没有终端的EC2 Ubuntu实例上运行R 2.9。当我加载一个具有显示依赖性的库,例如sqldf包时,我会收到以下错误:

library(sqldf)
...
Loading required package: tcltk
Loading Tcl/Tk interface ... Error in fun(...) : couldn't connect to display "localhost:11.0"
Error : .onLoad failed in 'loadNamespace' for 'tcltk'
Error: package 'tcltk' could not be loaded

这似乎是一个普遍的问题,我想知道其他人是如何解决的。安装X11服务器并不是一个理想的解决方案。

2个回答

45
使用虚拟帧缓冲 X11 服务器 -- 我们使用相同的方法在无头 chroot 中构建需要 X11 的 R 构建包。例如,从 rggobi 的构建依赖中取出以下部分:

xvfb xauth xfonts-base

安装这些包后,您可以使用 xvfb-run 命令。如果你通过以下方式启动 R:
xvfb-run R --no-save

现在你应该能够使用需要X11的例程和命令,例如某些绘图设备或tcl/tk初始化,在这些情况下也必须有X11。

对于Web服务器来说,同样的技巧也非常有用。


10

如果你控制服务器并能运行xvfb,Dirk的建议确实很有效。如果不能,请继续阅读...

在新版本的R(>=2.10,也可能更早),这不再是一个错误,而是一个警告:

> library(tcltk)
Loading Tcl/Tk interface ... done
Warning message:
In fun(libname, pkgname) : no DISPLAY variable so Tk is not available

现在,您可以通过以下方式禁止此警告和随后的软件包加载消息:

> suppressPackageStartupMessages(suppressWarnings(library(tcltk)))

通常,您会因为加载类似于qvalue这样依赖于tcltk的软件包而看到此消息;如果您希望在不受干扰的情况下操作,请先静默加载tcltk,然后再加载所需的软件包:

> suppressPackageStartupMessages(suppressWarnings(library(tcltk)))
> library(qvalue)

马克

因为http://dev.list.galaxyproject.org/wrapping-qvalue-in-Galaxy-td4655164.html的重生


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接