Как запустить R на сервере без X11 и избежать нарушения зависимостей - PullRequest
24 голосов
/ 10 ноября 2009

Я запускаю R 2.9 на большом экземпляре Ubuntu EC2, загруженном ОЗУ, но без терминала. Когда я загружаю библиотеку с отображаемыми зависимостями, например, пакет 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 ]

36 голосов
/ 10 ноября 2009

Используйте виртуальный сервер фреймбуфера X11 - мы делаем то же самое для сборки пакетов, требующих сборки X11 для R в безголовых chroot. Взять, например, Пар Билда-Зависит от rggobi:

xvfb xauth xfonts-base

После их установки вы можете использовать команду xvfb-run. Если вы начинаете R через, например,

xvfb-run R --no-save

теперь вы сможете использовать подпрограммы и команды, требующие X11, например, некоторые из графических устройств, или инициализация tcl / tk, которая также требует наличия X11.

Тот же трюк полезен для веб-серверов.

9 голосов
/ 19 июля 2012

Предложение Дирка действительно работает хорошо, если у вас есть контроль над сервером и вы можете запустить 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)

Mark

воскрес из-за: http://dev.list.galaxyproject.org/wrapping-qvalue-in-Galaxy-td4655164.html

...