Draft입니다. 업데이트하여 완전한 솔루션을 완성하겠습니다.
패키지의 기본적인 정보를 담고 있는 메타 파일로 패키지의 버전, 저자, 종속성 등이 담겨 있다. CRAN의 R 패키지 페이지에서는 패키지의 여러 정보를 제공하는데, 대부분이 DESCRIPTION의 정보로 표현한다.
개발하는 패키지가 참조하는 다른 패키지의 객체(함수나 메소드 등), 개발하는 패키지가 제공하는 객체를 네임스페이스에 등록하기 위한 정보를 담는다.
R
디렉토리에 프로그램 소스 파일을 담는다. *.R 형식으로 이름을 정의한다.
man
디렉토리에 데이터나 함수, 메소드에 대한 도움말 파일을 담는다. *.Rd 형식으로 이름을 정의한다.
vignettes
디렉토리에 도움말 보다 좀 더 친절한 패키지 사용 방법을 소개하는 소품 파일을 담는다. R 마크다운 편집 파일로 *.Rmd 형식으로 이름을 정의한다.
data
디렉토리에 R 데이터 파일을 담는다. R 데이터 파일로 *.rda 형식으로 이름을 정의한다.
inst
디렉토리에 패키지를 구성하는 표준 파일이 아니지만 패키지에 제공할 파일을 넣을 수 있다.
DESCRIPTION
, NAMESPACE
파일 이름은 변경이 불가능하다. 소스파일과 소품 파일은 이름으로도 그 기능을 유추할 수 있도록 간결하면서 명확한 이름을 만들어야 한다. 도움말 파일의 이름을 도움말을 제공하는 함수 혹은 메소드, 데이터 이름으로 정한다.
파일 이름은 절대로 non-ASCII 문자를 포함하면 안된다.
“한글 R 패키지는 패키지를 구성하는 여러 파일, 도움말, 소품 등을 한글로 표현하여, 내국인의 사용성을 제고하기 위한 패키지다.”
한글 인코딩은 Linux, MacOS, MS-Windows별로 상이하기 때문에 크로스 플랫폼으로 개발하는 데 이슈가 발생한다. 물론 영문과 같은 ASCII 문자의 경우에는 호환성의 이슈가 없다.
Linux, MacOS는 Unix-like 운영체제로 인코딩
을 UTF-8
을 사용하기에 호환성에는 큰 문제는 없다. 그러나 MS-Windows는 CP949
을 사용하기 때문에 문제가 발생한다. Linux, MacOS에서 정상적으로 동작하는 것이 MS-Windows에서는 오류가 발생할 수 있는 것이다. 그러므로 MS-Windows에서는 파일을 저장할 때 인코딩을 반드시 UTF-8
로 설정해야 한다.
MacOS에서 만든 한글이 포함된 파일 이름은 MS-Windows 환경에서는 자음과 모음이 분리되는 현상이 발생한다. 예를 들어 한글.txt
는 ㅎㅏㄴㄱㅡ ㄹ.txt
로 표현된다. 이 현상이 발생하는 원인은 MacOS와 MS-Windows가 유니코드 문자를 조합하는 정규화 방법의 차이에 기인한다.
아마 간혹 지인이나 업무상 메일에 첨부된 한글 파일의 이름이 예처럼 깨져서(?) 보이는 경험을 한 적이 있을 것이다. 이 경우에는 십중팔구 보내는 쪽에서 한글이름이 포함된 파일을 MacOS에서 만든 경우고, 당신은 MS-Windows에서 해당 파일을 접한 것이다.
구글링 하면 몇 가지 해결 방법이 이 이슈는 고질적인 이슈라 구글링하면 다음처럼 여러 솔루션이 나온다.
파일 이름은 절대로 non-ASCII 문자를 포함하면 안된다. 그러므로 파일 이름에 한글을 넣을 수 없다.
inst
디렉토리에 패키지를 구성하는 표준 패키지 파일이 아니지만 패키지에 제공할 파일을 넣을 수 있다.
소스파일과 도움말 파일, 소품 파일의 이름을 굳이 한글로 정할 필요는 없다. 그러나 경우에 따라서 표준 패키지 파일이 아닌 경우에 한글로 이름을 정할 수도 있다.
실습을 위한 데이터 파일로 *.CSV을 제공하고, 그 이름에 한글이 포함된 경우가 있었다.
다음은 대안 2에 대한 예제 소스로, get_rawdata() 함수를 정의한 것이다. 한글이 포함된 파일은 유효한 파일 이름으로 압축 후, 필요할 때, 압축 해제하는 사례다.
#' 소스 데이터 파일 가져오기
#'
#' 초중등 통계 데이터셋을 만든 데이터 파일을 가져온다.
#' 메뉴에서 해당 파일 이름을 선택하면, 지정한 경로에 파일이 복사된다.
#'
#' @param dest_dir character. 파일을 가져올 디렉토리 경로.
#' 기본값은 "."으로 현재 디렉토리
#' @export get_rawdata
#'
#' @aliases 데이터파일가져오기
#' @examples
#' \dontrun{
#' # `inst/extdata` 디렉토리 경로에 데이터 파일을 복사한다.
#' get_rawdata()
#'
#' # c:/temp에 선택한 데이터 파일을 복사한다.
#' get_rawdata("c:/temp")
#' }
#'
#' @importFrom utils menu unzip
get_rawdata <- function(dest_dir = "inst/extdata") {
pkg_resource = function(...) {
system.file(..., package = "statdata")
}
zip_name <- pkg_resource("extdata/rawdata.zip")
# fname <- c("초등과학3-2그림자길이(136쪽).csv",
# "초등과학3-2우리나라해역오염실태자료(104쪽).csv",
# "전체 파일",
# "취소하기")
fname <- c("\ucde8\uc18c\ud558\uae30",
"\uc804\uccb4 \ud30c\uc77c",
"\ucd08\ub4f1\uacfc\ud5593-2\uadf8\ub9bc\uc790\uae38\uc774(136\ucabd).csv",
"\ucd08\ub4f1\uacfc\ud5593-2\uc6b0\ub9ac\ub098\ub77c\ud574\uc5ed\uc624\uc5fc\uc2e4\ud0dc\uc790\ub8cc(104\ucabd).csv",
"\ucd08\ub4f1\uacfc\ud5595-2\uac01\ud589\uc131\uc758\ubc18\uc9c0\ub984(141\ucabd).csv",
"025\uc6d0\uc2dc_\uc131\ubcc4.csv")
# stringi::stri_escape_unicode("가져올 데이터 파일 선택하기")
index_choiced <- utils::menu(fname, graphics = FALSE,
title = "\uac00\uc838\uc62c \ub370\uc774\ud130 \ud30c\uc77c \uc120\ud0dd\ud558\uae30")
if (index_choiced == 1)
return()
if (index_choiced == 2) {
utils::unzip(zip_name, exdir = dest_dir)
} else {
utils::unzip(zip_name, files = fname[index_choiced], exdir = dest_dir)
}
}
패키지 빌드 시 발생하는 한글 문제는 대부분 MS-Windows 환경에서 발생한다. 그러므로 MacOS와 Linux에서 정상적으로 빌드되었다고 안심해서는 안된다. MS-Windows 환경에서의 이상 여부를 반드시 확인해야 한다.
DESCRIPTION 파일에는 패키지 타이틀이나 패키지의 기능을 설명하는 태그가 있다. 친절하게 패키지를 소개하기 위해서 한글로 타이틀과 패키지를 소개하고 싶을 것이다. 그러나 이 경우에는 패키지를 빌드할 때 오류가 발생한다.
소스 코드를 기술한 R/*.R 파일의 소스 스크립트에 한글을 포함할 경우, 패키지 빌드시 오류가 발생한다.
get_rawdata() 함수를 정의한 앞의 소스에 솔루션이 포함되어 있다. 한글은 stringi::stri_escape_unicode()를 이용해서 유니코드로 변경할 수 있다. 다만 stringi::stri_escape_unicode()에서는 이스케이프문자인 역 슬래시(“\”)가 두개로 출력되는데 하나를 지우고 입력한다.
stringi::stri_escape_unicode(c("한글을 사랑합니다.", "그러나 R과 궁합이 안 맞네요."))
#> [1] "\\ud55c\\uae00\\uc744 \\uc0ac\\ub791\\ud569\\ub2c8\\ub2e4."
#> [2] "\\uadf8\\ub7ec\\ub098 R\\uacfc \\uad81\\ud569\\uc774 \\uc548 \\ub9de\\ub124\\uc694."
stringi::stri_escape_unicode(c("한글", "사랑", "홍길동"))
#> [1] "\\ud55c\\uae00" "\\uc0ac\\ub791" "\\ud64d\\uae38\\ub3d9"
vignette 파일 본문에 한글을 포함할 경우 빌드시 오류 발생한다.
Created by bitR