графики ggplot в скриптах не отображаются в Rstudio

82

У меня странная проблема с Rstudio: если сценарий вызывает функции ggplot2 для отображения графика, то использование Source для запуска сценария не создает графики. Если я выбираю весь сценарий с Ctrl+A, затем Выполнить текущую строку или выбор ( Ctrl+Enter), то сюжет делает дисплей. Аналогичным образом, ввод команд построения в консоль дает правильный результат.

Например:

library(ggplot2)

p = ggplot(mtcars, aes(wt, mpg))
p + geom_point()

Будет выдавать результат только в том случае, если он вставлен в консоль, но не из источника.

Есть и другие вопросы по этому поводу, но ни один из них бесполезен:

Как я могу заставить Rstudio отображать графики при исходном скрипте? Я использую Rstudio 0.98.1062 и R 3.1.1.

Лучший
источник

Ответы:

129

Решение состоит в том, чтобы явно вызвать print()объект ggplot:

library(ggplot2)

p <- ggplot(mtcars, aes(wt, mpg))
p <- p + geom_point()
print(p)

ggplotфункция возвращает объект класса ggplot; ggplot2 работает, перегружая printфункцию, чтобы по-разному вести себя с объектами класса ggplot - вместо того, чтобы печатать их в STDOUT, он создает диаграмму.

В интерактивном режиме все работает хорошо, потому что R предполагает, что большинство команд выполняется через print()функцию. Это сделано для нашего удобства и позволяет нам печатать rnorm(1)и получать любой видимый результат. Когда используется команда «Выполнить текущий выбор» ( Ctrl+Enter), RStudio ведет себя так, как если бы каждая выделенная строка была введена в интерактивном режиме и запущена. Вы можете убедиться в этом, проверив историю своих команд на Consoleпанели после запуска нескольких выбранных строк.

Но от этого удобного режима отказываются, когда файл читает source(). Поскольку эта функция предназначена для запуска (потенциально длинных и затратных в вычислительном отношении) сценариев R, нежелательно засорять STDOUT сообщениями с низким приоритетом. Поэтому source()по умолчанию выводится только сообщение об ошибке. Если вы хотите чего-то еще, вы должны прямо попросить об этом.

Мирек Длугош
источник
20

хотя это довольно старый вопрос. У меня была та же проблема, и я нашел быстрое решение, если вы хотите использовать кнопку «источник» в поле редактирования R studio.

вы можете просто включить «источник с эхом» (Ctrl + Shift + Enter), и график будет отображаться так, как ожидалось.

bcat
источник
1
Отлично, не знал этого! Это хорошо дополняет объяснение, данное @ Mirosław Zalewski.
Уве
9

Недавно я столкнулся с этим вопросом и понял, что самый современный способ - позвонить show(p)после создания сюжета.

Лучший
источник
Есть ли у вас самые свежие источники информации? Все, что я могу найти, это: ggplot2.tidyverse.org/reference/print.ggplot.html
Крис
2

Я нашел этот вопрос при поиске аналогичной проблемы (графики не отображаются в RStudio). Я пытался устранить неполадки в сложном блоке ggplot2, выполняя его по частям, но не смог ничего отобразить в окне графика.

Причина: tiff()функция, которую я открыл ранее, не закрылась.

Решение: я запускал dev.off()несколько раз, пока все мои предыдущие tiff()функции не завершились, затем я смог создать графики в RStudio и просмотреть результаты в окне графика.

Таня
источник