Category Archives: 03_R-Project

CRAN mirror 실제 구축하기

예전에 R의 미러 사이트 운영에 대하여 다룬 적이 있는데, 이번에는 정말로 해보기로 했다. Linux를 기반으로 한 컴퓨터가 노트북, 구형 PC, 신형 PC로 3대나 있다 보니 구축해 보는 것도 나쁘지는 않을 것 같아서 이다. CRAN의 관련 문서 링크와 예시 코드는 다음과 같다.

https://cran.r-project.org/mirror-howto.html

rsync -rtlzv --delete cran.r-project.org::CRAN /dir/on/local/disc

그런데 이렇게 모두 다 받으면 편하기는 하지만, 나에게 필요없는 파일들도 역시 많이 받게 된다. include와 exclude를 적당히 사용해서 파일을 선택하는 방법이 좋을 것 같다.

exclude 옵션만을 이용하는 경우는 조건이 어렵지 않다. 조건이 한 두개 정도로 적으면 –exclude=” ” 를 반복해서 적용할 수 있다. 그런데 조건이 많아진다면 해당 구절을 txt 파일로 만들고 –exclude-from=”절대경로” 로 하면 깔끔해 진다.

include 옵션을 사용하는 경우는 좀 어려운데 흔히 사용하는 ‘*’이 그대로 사용하면 파일이 제대로 전송이 되지 않는다. 인터넷에서 찾은 글은 ‘**’ 혹은 ‘***’를 를 이용해야 하는 것 같다. 귀한 내용이라서 사라질까봐 동일한 내용을 반복해서 기록해 둔다.
stackoverflow.com/q/48010623

"*"         means everything
"dir1"      transfers empty directory [dir1]
"dir*"      transfers empty directories like: "dir1", "dir2", "dir3", etc...
"file*"     transfers files whose names start with [file]
"dir**"     transfers every path that starts with [dir] like "dir1/file.txt", "dir2/bar/ffaa.html", etc...
"dir***"    same as above
"dir1/*"    does nothing
"dir1/**"   does nothing
"dir1/***"  transfers [dir1] directory and all its contents like "dir1/file.txt", "dir1/fooo.sh", "dir1/fold/baar.py", etc..

내가 사용하는 옵션은 다음과 같다.

rsync -rtlzv --delete --include="src/contrib**" --exclude-from="/home/byun1114/mirror/mirror_r_exclude.txt" cran.r-project.org::CRAN /var/www/html/R


그 다음에는 사용하는 컴퓨터에서 R 설정을 변경해 주어야 한다. 내가 RStudio Server 를 이용하고 있고, 이 경우에는 Rprofile.site 파일을 수정해 주어야 한다. 파일 위치를 찾아야 하는데 우선 R에서 다음 명령어를 사용하여 R이 설치된 기본 위치를 확인한다.

R.home(component = "home")
[1] "/usr/lib/R"

그리고 etc/Rprofile.site 파일에서 수정한다. 내 컴퓨터의 경우에는 Apaches 홈폴더의 R 디렉토리에 맞추어 동기화 시켰으므로 /R을 붙였다.

local({r <- getOption("repos"); r["CRAN"] <- "http://nuc.work/R"; options(repos=r)})

이렇게 수정한 다음 R 세션을 종료하고 다시 실행하면 secure 어쩌고 하는 경고 메세지가 나온다. 설명에 맞추어서 변경하여 준다.

https://support.rstudio.com/hc/en-us/articles/360047157094-Managing-R-with-Rprofile-Renviron-Rprofile-site-Renviron-site-rsession-conf-and-repos-co


CSV export 시 column 이름 빼고 하기

write.csv()를 이용할 경우 다 괜찮은데, 첫 줄이 강제적으로 필요하게 된다. 이를 해결하기 위해서는 write.table()을 이용하면 된다. 내가 사용하는 옵션은 다음과 같다.

write.table(x, file = ‘’, quote = F, row.names = F, col.names = F, sep=",")

Scatter plot과 Density Plot 같이 그리기

ggplots을 이용한 예시가 많지만 나는 안 쓰는 것을 좋아하기 때문에 인터넷 검색을 통하여 다음과 같은 방법을 이용했다. 꾸미기 위한 코드는 생략하고 기술함. density 함수로 값들을 변환한 다음, 이를 기반으로 점을 선으로 그려 주는 것이 핵심임.

density.mean = density(dat[, 1])
density.sd = density(dat[, 2])
layout(matrix(data=c(1, 2, 2, 1, 2, 2, 0, 3, 3), nrow=3))
plot(density.mean$x, density.mean$y, type="l")
plot(dat[, 1], dat[, 2])
plot(density.sd$y, density.sd$x, type="l")

grep(), 이나 grepl()에서도 복수의 조건을 검색할 수 있다. 여러번 반복하는 것보다 조금 간단하게 코딩을 할 수 있다. pattern 부분에 “|” 로 공란없이 묶어서 하면 된다.

예를 들어  이런 식으로 사용할 수 있다.

grep("^ABC|^BVC", data)

install.packages

R에서 소스 파일로만 라이브러리를 설치해야 할 때에는 위의 명령어 형태로 입력하면 쉽게 설치할 수 있다.

install.packages(" bioconductor.org/packages/release/bioc/src/contrib/EBImage_4.28.1.tar.gz", repos = NULL, type= "source")

sosal.kr/966