如何在没有X11的服务器上运行R,并避免破坏依赖性

时间:2009-11-10 20:10:26

标签: r x11

我在大型EC2 Ubuntu实例上运行R 2.9,加载了RAM,但没有终端。当我加载具有显示依赖项的库(例如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 个答案:

答案 0 :(得分:36)

使用虚拟帧缓冲X11服务器 - 我们也是这样做来构建需要X11的软件包,用于无头chroots中的R版本。以此为例构建的部分取决于rggobi

  

xvfb xauth xfonts-base

安装完成后,您可以使用xvfb-run命令。如果您通过例如

启动R.
xvfb-run R --no-save

您现在应该能够使用需要X11的例程和命令,例如一些绘图设备,或者tcl / tk初始化也坚持使用X11。

同样的技巧对Web服务器很有用。

答案 1 :(得分:9)

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

在较新版本的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

而复活