스크립트의 ggplot 플롯이 Rstudio에 표시되지 않습니다.


82

Rstudio에 이상한 문제가 있습니다. 스크립트가 ggplot2 함수를 호출하여 플롯을 표시하면 소스 를 사용 하여 스크립트를 실행해도 플롯이 생성되지 않습니다. 를 사용하여 전체 스크립트를 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는 ggplot print클래스의 객체에서 다르게 동작하도록 함수를 오버로딩 하여 작동합니다. STDOUT에 출력하는 대신 차트를 생성합니다.

R은 대부분의 명령이 print()기능을 통해 실행된다고 가정하기 때문에 모든 것이 대화 형 모드에서 잘 작동 합니다. 이것은 우리의 편의를위한 것이며 우리 rnorm(1)가 모든 가시적 인 출력 을 입력 하고 얻을 수 있도록합니다. Run current selection 명령이 사용되면 ( Ctrl+Enter), RStudio는 선택된 각 줄이 대화 형 모드로 입력되고 실행 된 것처럼 작동합니다. Console선택한 몇 줄을 실행 한 후 창 에서 명령 기록을 확인하여 확인할 수 있습니다 .

그러나이 편리한 모드는에서 파일을 읽을 때 중단됩니다 source(). 이 함수는 (잠재적으로 길고 계산 비용이 많이 드는) R 스크립트를 실행하기위한 것이므로 우선 순위가 낮은 메시지로 STDOUT을 오염시키는 것은 바람직하지 않습니다. 이것이 source()기본적으로 오류 메시지 만 출력하는 이유 입니다. 다른 것을 원하면 명시 적으로 요청해야합니다.


20

꽤 오래된 질문이지만. R 스튜디오 편집 상자에서 "소스"버튼을 사용하려면 동일한 문제가 발생하여 빠른 해결책을 찾았습니다.

"에코가있는 소스"(Ctrl + Shift + Enter)를 켜면 플롯이 예상대로 표시됩니다.


1
좋아, 몰랐어! 그것은 @ Mirosław Zalewski의 설명에 멋지게 추가됩니다.
Uwe


2

비슷한 문제를 검색 할 때이 질문을 발견했습니다 (RStudio에 표시되지 않는 플롯). 복잡한 ggplot2 블록을 부분적으로 실행하여 문제를 해결하려고했지만 플롯 창에 아무것도 표시되지 않았습니다.

이유 : tiff()이전에 열었던 기능이 닫히지 않았습니다.

솔루션 : dev.off()이전 tiff()기능이 모두 완료 될 때까지 몇 번 실행 한 다음 RStudio에서 플롯을 만들고 플롯 창에서 결과를 볼 수있었습니다.

당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.