2009-11-10 29 views
22

我在裝有RAM的大型EC2 Ubuntu實例上運行R 2.9,但沒有終端。當我裝載有顯示器的依賴,如sqldf包庫,我收到以下錯誤:如何在沒有X11的情況下在服務器上運行R,並避免依賴關係破損

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服務器不是一個理想的解決方案。

回答

32

使用虛擬幀緩衝區X11服務器 - 我們也是這樣做的,以構建需要X11 for R的軟件包構建在無頭chroot中。以例如從rggobi的構建時刻依賴的標準桿:

xvfb xauth xfonts-base

安裝這些之後,你可以使用xvfb-run命令。如果你通過例如

xvfb-run R --no-save 

您現在應該能夠使用需要X11的例程和命令,例如,一些繪圖設備,或tcl/tk初始化,它們也堅持使用X11。

相同的技巧對於Web服務器很有用。

9

德克的建議確實很好,如果你有控制服務器&可以運行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

相關問題