R ggiraph - без графика при запуске.R файла

Как получить график при выполнении файла.R? Файл (test.r) выглядит так:

library(ggplot2)
library(ggiraph)
gg <- ggplot(data = mtcars, aes(x = mpg, y = wt, color = factor(cyl)))
gg1 <-  gg + geom_point_interactive(aes(tooltip = gear), size = 5)
ggiraph(code = print(gg1))

Я запускаю его с этой командой:

R < test.R --no-save

Но ничего не происходит. Если я просто запускаю R из командной строки и ввожу код построчно, Firefox открывается и показывает действительно хороший график с желаемой надписью мыши.

R version 3.2.3 (2015-12-10)
x86_64-pc-linux-gnu

1 ответ

Решение

R создает временный файл.html, а затем порождает gvfs-open процесс для просмотра этого файла (который в свою очередь открывает Firefox). Когда вы запускаете свой скрипт из командной строки, R закрывает и очищает свои временные файлы до того, как процесс Firefox сможет полностью загрузиться. Вы можете убедиться в этом, выполнив

$ R -q --interactive < test.R
> library(ggplot2)
> library(ggiraph)
> gg <- ggplot(data = mtcars, aes(x = mpg, y = wt, color = factor(cyl)))
> gg1 <-  gg + geom_point_interactive(aes(tooltip = gear), size = 5)
> ggiraph(code = print(gg1))
Save workspace image? [y/n/c]: 
gvfs-open: /tmp/RtmpPxtiZi/viewhtml3814550ff070/index.html: error opening location:
Error when getting information for file '/tmp/RtmpPxtiZi/viewhtml3814550ff070/index.html': No such file or directory

Простое исправление - добавить Sys.sleep(5) в конце вашего сценария. Это паузы R на несколько секунд, позволяя gvfs-open процесс, чтобы закончить открытие вашего временного файла в окне браузера, прежде чем R выходит и убирает за собой.

Обратите внимание, что R все равно удалит временный index.html файл, когда он выходит после Sys.sleep(), но Firefox уже будет иметь кеш в памяти.

РЕДАКТИРОВАТЬ: альтернативное решение состоит в том, чтобы явно записать ваш интерактивный сюжет в файл.html, который сохраняется после R выходы. Вы можете сделать это, сохранив результат ggiraph к переменной, а затем передать это htmlwidgets::saveWidget:

myplot <- ggiraph(code = print(gg1))
htmlwidgets::saveWidget( myplot, "test.html" )
browseURL( "test.html" )
Другие вопросы по тегам