Wykresy ggplot w skryptach nie są wyświetlane w Rstudio

82

Mam dziwny problem z Rstudio: jeśli skrypt wywołuje funkcje ggplot2 w celu wyświetlenia wykresu, to użycie Source do uruchomienia skryptu nie generuje wykresów. Jeśli wybiorę cały skrypt zCtrl+A , a następnie Uruchom bieżący wiersz lub wyboru ( Ctrl+Enter), a następnie fabuła robi wyświetlacz. Podobnie wpisanie poleceń kreślenia w konsoli daje poprawne wyniki.

Na przykład:

library(ggplot2)

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

Wyświetli dane wyjściowe tylko wtedy, gdy zostanie wklejone do konsoli, a nie w przypadku źródła.

Są na ten temat inne pytania, ale żadne z nich nie jest pomocne:

Jak mogę sprawić, aby Rstudio wyświetlało wykresy, gdy pochodzi skrypt? Używam Rstudio 0.98.1062 i R 3.1.1.

Superbest
źródło

Odpowiedzi:

129

Rozwiązaniem jest jawne wywołanie print()obiektu ggplot:

library(ggplot2)

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

ggplotfunkcja zwraca obiekt klasy ggplot; ggplot2 działa na zasadzie przeciążania printfunkcji, aby zachowywać się inaczej na obiektach klasy ggplot - zamiast wypisywać je na STDOUT, tworzy wykres.

Wszystko działa dobrze w trybie interaktywnym, ponieważ R zakłada, że ​​większość poleceń jest wykonywana przez print()funkcję. Jest to dla naszej wygody i umożliwia nam wpisywanie rnorm(1)i uzyskiwanie wszelkich widocznych wyników. Gdy używane jest polecenie Uruchom bieżącą selekcję ( Ctrl+Enter), RStudio zachowuje się tak, jakby każda wybrana linia została wpisana w trybie interaktywnym i uruchomiona. Możesz to sprawdzić, sprawdzając historię poleceń w Consolepanelu po uruchomieniu kilku wybranych linii.

Ale ten wygodny tryb jest porzucany, gdy plik jest czytany przez source(). Ponieważ ta funkcja jest przeznaczona do uruchamiania (potencjalnie długich i kosztownych obliczeniowo) skryptów języka R, niepożądane jest zaśmiecanie STDOUT komunikatami o niskim priorytecie. Dlatego source()domyślnie wyświetla tylko komunikat o błędzie. Jeśli chcesz czegoś innego, musisz wyraźnie o to poprosić.

Mirek Długosz
źródło
20

chociaż to dość stare pytanie. Miałem ten sam problem i znalazłem szybkie rozwiązanie, jeśli chcesz użyć przycisku „źródło” w polu edycji R studio.

możesz po prostu włączyć „źródło z echo” (Ctrl + Shift + Enter), a wykres pokaże się zgodnie z oczekiwaniami

bcat
źródło
1
Świetnie, nie wiedziałem tego! To ładnie uzupełnia wyjaśnienie, którego udzielił @ Mirosław Zalewski.
Uwe
9

Niedawno natknąłem się na to pytanie i zdałem sobie sprawę, że najbardziej aktualnym sposobem jest zadzwonienie show(p)po stworzeniu fabuły.

Superbest
źródło
Czy masz jakieś źródła, że ​​jest to najbardziej aktualny sposób? Wszystko, co mogę znaleźć, to: ggplot2.tidyverse.org/reference/print.ggplot.html
Chris,
2

Znalazłem to pytanie podczas wyszukiwania podobnego problemu (wykresy nie pojawiają się w RStudio). Próbowałem rozwiązać problem ze skomplikowanym blokiem ggplot2, uruchamiając go w częściach, ale nie mogłem nic wyświetlić w oknie wykresu.

Powód: tiff()funkcja, którą otworzyłem wcześniej, nie została zamknięta.

Rozwiązanie: Uruchomiłem dev.off()kilka razy, aż wszystkie moje wcześniejsze tiff()funkcje zostały zakończone, wtedy mogłem tworzyć wykresy w RStudio i przeglądać wyniki w oknie wykresów.

Tania
źródło