2017년 3월 6일 월요일

R Studio에서의 "Error in RStudioGD() Shadow graphics device error: r error 4"

전에 제가 올린 "Linux on POWER (ppc64le)에 R 서버 및 R-Studio 설치하기"라는 posting에 포함된 tgz 파일 속의 binary로 Rstudio를 수행할 때, R에서는 그래프가 그려져도 Rstudio에서는 그려지지 않는 경우가 있다고 합니다.  

이 경우, 다음과 같이 Rstudio에 DISPLAY 환경 변수를 설정하면 문제를 해결할 수 있습니다.

R_HOME (여기서는 /usr/local/lib/R) 밑의 etc/Renviron 이라는 파일 속에 환경 변수를 설정할 수 있습니다.  여기서는 일단 DISPLAY를 null 값으로 설정하겠습니다.

u0017496@sys-85972:/usr/local/lib/R/etc$ sudo vi Renviron
...
DISPLAY=""

그리고 나서 Rstudio server를 stop/start 시킵니다.

u0017496@sys-85972:/usr/local/lib/R/etc$ sudo systemctl stop rstudio-server

u0017496@sys-85972:/usr/local/lib/R/etc$ sudo systemctl start rstudio-server

이제 다음과 같이 Rstudio에 http://ip_address:8787로 접속하여 Sys.getenv("DISPLAY) 명령으로 확인한 뒤, capabilities() 명령을 내려보면 jpeg 및 png가 모두 FALSE로 설정되어 있는 것을 보실 수 있습니다.   이 상황에서는 plot 명령으로 그래프를 그려봐도 다음과 같은 error만 나옵니다.

> Sys.getenv("DISPLAY")
[1] ""
> capabilities()
       jpeg         png        tiff       tcltk         X11        aqua 
      FALSE       FALSE       FALSE       FALSE       FALSE       FALSE 
   http/ftp     sockets      libxml        fifo      cledit       iconv 
       TRUE        TRUE        TRUE        TRUE        TRUE        TRUE 
        NLS     profmem       cairo         ICU long.double     libcurl 
       TRUE       FALSE       FALSE        TRUE        TRUE        TRUE 
> plot(mtcars)
Error in RStudioGD() : 
  Shadow graphics device error: r error 4 (R code execution error)
In addition: Warning message:
In grDevices:::png("/tmp/RtmpYfCiVe/3183debe21b14a24a820a8ee6162a221.png",  :
  unable to open connection to X11 display ''



이제 etc/Renviron을 편집해서 다음과 같이 DISPLAY를 ":0"으로 바꾸겠습니다.

u0017496@sys-85972:/usr/local/lib/R/etc$ sudo vi Renviron
...

DISPLAY=":0"


그리고 나서 Rstudio server를 stop/start 시킵니다.

u0017496@sys-85972:/usr/local/lib/R/etc$ sudo systemctl stop rstudio-server

u0017496@sys-85972:/usr/local/lib/R/etc$ sudo systemctl start rstudio-server

이번에 접속해서 동일한 명령들을 내려보면, capabilities()에서 jpeg 및 png가 모두 TRUE로 설정되어 있는 것을 보실 수 있습니다.   이제 plot 명령으로 그래프를 그려보면 잘 나옵니다.

> Sys.getenv("DISPLAY")
[1] ":0"
> capabilities()
       jpeg         png        tiff       tcltk         X11        aqua 
       TRUE        TRUE       FALSE       FALSE        TRUE       FALSE 
   http/ftp     sockets      libxml        fifo      cledit       iconv 
       TRUE        TRUE        TRUE        TRUE        TRUE        TRUE 
        NLS     profmem       cairo         ICU long.double     libcurl 
       TRUE       FALSE       FALSE        TRUE        TRUE        TRUE 
> plot(mtcars)

더 간단하게는, Sys.setenv 명령으로 DISPLAY 변수를 설정해도 됩니다.

> Sys.setenv(DISPLAY="unix")
> x <- (1:10)
> y <- (11:20)
> plot(x,y,type='l')
Error in RStudioGD() : 
  Shadow graphics device error: r error 4 (R code execution error)
In addition: Warning message:
In grDevices:::png("/tmp/RtmpsGv8Ft/10d5f91915bc4744aa48a7fbd4806103.png",  :
  unable to open connection to X11 display ''
> Sys.setenv(DISPLAY=":0")
> plot(x,y,type='l')
>



댓글 2개:

  1. Shadow graphics device error 4 메시지가 어떤 경우에
    뜨는건지요?

    답글삭제
    답글
    1. 그 밑의 메시지처럼, 그래프를 그려야 하는데 그릴 곳(display)이 없는 경우입니다.

      삭제