Pixi와 쓰는 R

computer-tool
r-stat
pixi
꼬이면 지우고 말지!
Author

JS HUHH

Published

April 3, 2024

TL; DR

Pixi로 R도 부릴 수 있다.

왜 pixi인가?

나는 픽시를 사랑한다. 픽시를 쓰면서 파이썬 패키지를 깔거나 세팅을 할 때 고민하지 않는다. (알 수 없는 이유로) 꼬이면 지우고 다시 깔면 그만이다. R을 이렇게 파이썬처럼 운용할 수 없을까? 문득 이런 생각이 들더라. Pixi의 베이스가 되는 conda에 R이 있다. 그렇다면 pixi를 통해 R을 깔 수 있지 않을까?

다만 매 프로젝트마다 파이썬과 필요한 패키지를 깔아야 하는 것이 불만족스러운 혹은 불가능한 환경이 있을 수 있다.

이런 생각으로 쭉 해보니 의외로 잘 되더라. 이 포스팅은 (전적으로!) 이 내용을 까먹고 헤맬 미래의 나 놈을 위한 것이다.

얻는 것과 잃는 것

R의 IDE로 VS Code를 쓴다면 천군만마와도 같은 GitHub Copilot을 부릴 수 있다. 엄청난 장점이다. 잃는 것은 R과 최고의 궁합을 자랑하는 RStudio이다. RStudio에 임의의 R 커널을 연결할 수 있으면 좋겠는데 좀 더 비싼 기업용 버전인 workbench에서만 해당 기능을 지원하는 듯 싶다.

RStudio는 아쉽지만 VS Code + pixi를 쓰는 것의 장점이 아쉬움 이상이다.

Pixi setting

다음과 같은 사용 환경을 전제한다.

  • OS
    • Windows 11 WSL 2 + Ubutu 22.04 LTS
    • Macos (Sonoma, Silicon)
  • pixi

일단 R에 관해서 쭉 설명을 하고 Julia에 관한 내용을 더하겠다. R에 비하면 Julia 설치는 별 문제가 없다.

R을 깔고자 하는 디렉토리에서 아래와 같이 실행한다.

> pixi init # 픽시 초기화 
> pixi add python=3.11 r-base radian # 파이썬, r-base, radian 추가 

위 명령어를 실행하면 [pixi 코드를 품은 디렉토리]/.pixi/envs/default 폴더 아래 파이썬, R-base 그리고 radian이 설치된다. radian은 파이썬으로 작성된 일종의 대안 터미널이다. 꽤 쓸만하다. 그리고 해당 경로를 사용하는 셸의 PATH로 지정하자. 그래서 radian과 R을 터미널에서 실행할 수 있다. nano ~/.zshrc 등을 실행해 아래 구절을 넣고 저장하고 셸을 다시 불러오면 된다.

export PATH="$PATH:[pixi가 깔린 디렉토리]/.pixi/envs/default/bin"

Miniforge

pixi 자체가 Conda에 의존한다. 따라서 Conda를 설치하는 게 좋다. 커뮤니티 버전인 Miniforge를 설치하자. Miniforge는 Macos에서는 brew로 설치할 수 있고, Ubuntu에서는 별도의 설치 파일을 받아서 설치하면 된다.

> brew install miniforge
> curl -L -O "https://github.com/conda-forge/miniforge/releases/latest/download/Miniforge3-$(uname)-$(uname -m).sh"
> bash Miniforge3-$(uname)-$(uname -m).sh

미니포지를 통해 gfortran을 설치하자. 이를 설치하지 않으면 R의 패키지 설치 과정에서 많은 문제가 생길 것이다.

> conda install -c conda-forge gfortran

아래 환경 설정을 마친 후 시험삼아서 아래 두 패키지를 설치해보자. VS Code에서 R을 쓰기 위해서 아래 두 패키지를 설치해야 한다.

> install.packages("languageserver")
> install.packages("httpgd")

R을 위한 실행 환경

R을 패키지로 설치하지 않았기 때문에 몇 가지 설정이 필요하다. R의 설정을 위해 필요한 파일은 .Renviron, .Rprofile 두 가지이다. 이 두 파일을 $HOME에 생성하도록 하자.

## macrtools - gfortran: start
# PATH=${PATH}:/opt/gfortran/bin
## macrtools - gfortran: end

# Setting LIB location

R_LIBS_SITE="[pixi가 깔린 디렉토리]/.pixi/envs/default/lib/R/library"
# Setting CRAN Server

local({r <- getOption("repos")
       r["CRAN"] <- "https://cloud.r-project.org"
       options(repos=r)})

.Renviron 파일에서는 R의 라이브러리 위치를 지정하고, Rpofile에서는 CRAN 서버를 지정한다.

R에서 .libPaths()를 패키지가 설치되는 위치를 확인할 수 있다.

VS Code 설정

먼저 R의 extension을 받아서 설치하자. 해당 확장을 설치한 후 몇 가지 설정을 바꿔야 한다. VS Code의 확장 설정으로 가자(Figure 1). 이후 필요한 설정을 바꾸면 된다.(Figure 2)

Figure 1: 익스텐션의 설정으로 가자.
Figure 2: 두 개 모두 적절한 위치로 바꿔 사용하자.

이외에 httpgd를 쓰는 것을 체크하자.

VS Code로 R 쓰기

https://code.visualstudio.com/docs/languages/r

전체적인 지침은 링크에 잘 정리가 되어 있다.

Packages 설치 시 유의사항

패키지 설치 시 만날 수 있는 몇 가지 에러 유형을 패키지 별로 정리해보자.

systemfonts

systemfonts 패키지가 대체로 잘 설치되지 않는다. 이 패키지가 없으면 languageserver, devtools 등등 이에 의존하는 주요 패키지가 설치되지 않는다. 발생하는 에러 메시지를 잘 보면서 OS 별로 대응하면 된다. 하지만 때로는 시키는대로 해도 해결되지 않는 경우가 있다. 그럴 땐 어떻게 할까? R 설치에서 이 문제는 C++ 컴파일러와 관련된 이슈다. 가장 깔끔하게 해결하려면 pixi shell로 접근해서 해당 패키지를 설치하면 된다. 즉,

# pixi가 설정된 해당 디렉토리에서 
> pixi shell 
> radian 
# In radian 
> install.packages("systemfonts")

이렇게 설치하면 OS 상관 없이 대체로 잘 설치가 된다. 패키지를 업데이트하지 않는 이상 이상 설치된 이후 활용에는 pixi shell 환경이 필요하지 않다.

tidyverse

Matrix 패키지가 버전이 맞지 않아서 설치가 안된다.

https://github.com/cran/Matrix/releases

(이 글을 쓰는 시점에서) 1.6-5 버전의 Source Code의 링크를 복사한 후 devtools를 통해 설치한다.

> devtools::install_url("https://github.com/cran/Matrix/archive/refs/tags/1.6-5.zip") 

MASS

위와 같은 방법으로 접근하면 된다.

https://github.com/cran/MASS/releases

(이 글을 쓰는 시점에서) MASS 7.3-60 버전이 설치 가능했다.

Julia 설치하기

R에 비하면 훨씬 깔끔하고 운용이 쉽다. brew를 이용해서 juliaup을 설치하자. Linux와 Macos에서 R보다는 훨씬 편리하게 사용할 수 있다.

Julia를 써보면 이 언어가 다른 어떤 고수준 프로그래밍 랭귀지에 비해서 “모던”하다는 사실을 느낄 수 있다. 우선 언어 자체의 설치가 간편하고, 패키지 설치 관리가 toml을 통해 이뤄진다.

> brew install juliaup
> juliaup add release # 최신 버전을 설치한다. 
> juliaup install 1.10.3 # 특정 버전을 설치한다.
> juliaup update # 업데이트 

VS Code에서 Julia 확정을 설치하고 확장 설정에서 Julia: Executable Path를 찾아서 .pixi 아래 설치된 줄리아의 실행 디렉토리를 설정한다. 터미널에서 julia를 실행하고 싶으면, .zshrc에 해당 디렉토리를 추가하면 된다.