Docker 컨테이너의 R로 다이어그램 플롯

8381 단어 tidyverseR도커

소개



R의 tidyverse 패키지군을 포함한 docker 이미지로서 rocker/tidyverse가 유명합니다. 그러나 이러한 이미지는 (아마도) RStudio를 사용한다고 가정합니다.

나는 RStudio를 사용하지 않았고, 다음과 같은 경위도 있어 컨테이너내의 R 로 플롯을 표시시키는 방법을 조사해 보았습니다.
  • R 패키지 버전을 고정하고 싶습니다
  • tidyverse 패키지 세트를 설치하는 데 시간이 오래 걸립니다
  • rockerjp/tidyverse를 사용하면 많은 양의 패키지를 직접 설치하지 않아도됩니다
  • .
  • 컨테이너의 R로 플롯을 표시하고 싶습니다

  • 참고 URL


  • Docker를 사용하여 GUI 애플리케이션 실행
  • Docker 컨테이너에서 GUI 앱을 실행하여 호스트 측에 표시
  • Docker 컨테이너에서 GUI 응용 프로그램을 시작합니다.

  • 이러한 링크처의 설정과 비교하면 항목이 적습니다만, 아마 사용한 R 의 컨테이너내에서 설정되어 있기 때문이라고 생각합니다.

    예 1: r-base 이미지의 경우



    먼저 R의 공식 이미지 r-base에서 시도했습니다. 시행 착오 후의 결과를 나타냅니다.

    설정 항목


  • -u docker
  • 이것을 지정하지 않으면 플롯이 표시되지 않았습니다.

  • -e DISPLAY=$DISPLAY-v /tmp/.X11-unix:/tmp/.X11-unix
  • 참고 자료 참조

  • docker run --rm -it \
      -u docker \
      -e DISPLAY=$DISPLAY \
      -v /tmp/.X11-unix:/tmp/.X11-unix \
        r-base R
    
    boxplot(iris$Sepal.Length ~ iris$Species)
    



    플롯되었습니다.

    예 2: rockerjp/tidyverse 이미지의 경우



    우선 도전



    이전과 달리 사용자 이름은 rstudio입니다 (원래 이미지에 지정됨).
    docker run --rm -it \
      -u rstudio \
      -e DISPLAY=$DISPLAY -v /tmp/.X11-unix:/tmp/.X11-unix \
      rockerjp/tidyverse R
    
    > boxplot(iris$Sepal.Length ~ iris$Species)
    Error in (function (display = "", width, height, pointsize, gamma, bg,  : 
      X11 module cannot be loaded
    In addition: Warning message:
    In grSoftVersion() :
      unable to load shared object '/usr/local/lib/R/modules//R_X11.so':
      libXt.so.6: cannot open shared object file: No such file or directory
    

    이런 식으로 오류가 발생하여 플롯되지 않았습니다.libXt.so.6가 부족한 것 같습니다.

    libxt6 패키지를 추가한 이미지의 경우



    그래서 다음과 같은 Docker 파일을 준비했습니다.
    FROM rockerjp/tidyverse:latest
    
    RUN apt-get update \
        && apt-get install -y libxt6
    

    빌드합니다. 이미지명은 만일 mytidyverse 로 합니다.
    docker build -t mytidyverse .
    
    docker run --rm -it \
      -u rstudio \
      -e DISPLAY=$DISPLAY -v /tmp/.X11-unix:/tmp/.X11-unix \
      mytidyverse R
    
    boxplot(iris$Sepal.Length ~ iris$Species)
    

    그림은 생략하지만 이번에는 플롯되었습니다.
    tidyverse가 설치되어 있으므로 ggplot2도 시도해 보겠습니다.
    library(ggplot2)
    ggplot(iris, aes(Species, Sepal.Length)) +
        geom_boxplot()
    



    이것도 플롯되었습니다.

    결론


    rockerjp/tidyverse 컨테이너에서 R을 시작하고 플롯하는 데 성공했습니다. 이제 직접 tidyverse 패키지를 설치하지 않고 완료할 수 있습니다.

    공식 이미지로 libxt6 패키지를 추가해 주시면 이번과 같은 수고는 줄어듭니다만……(타력 본원)

    좋은 웹페이지 즐겨찾기