7장 시스템 및 외국어 인터페이스

7장 시스템 및 외국어 인터페이스

R은 밖으로 나가는 문과 안으로 들어오는 문, 두 개를 가지고 있어요. 하나는 운영체제와 소통하는 시스템 인터페이스, 다른 하나는 C나 FORTRAN 같은 다른 언어로 짠 코드를 R 안에서 불러 쓰는 외국어(포린) 인터페이스죠. 함께 넘어가면서 R이 단순한 계산기가 아니라 실제 시스템과 연결되는 지점을 살펴볼게요.

출처: R 공식 매뉴얼

본문

7.1 운영체제 접근 (Operating system access)

운영체제 셸에 접근하는 길은 R 함수 system을 통해서예요. 세부 동작은 플랫폼마다 다르고(자세한 내용은 온라인 도움말을 참고하세요), 안전하게 가정할 수 있는 건 대략 두 가지뿐이에요. 첫 번째 인자 command는 (반드시 셸을 거치지 않아도) 실행을 위해 넘겨지는 문자열이고, 두 번째 인자 internal이 참(TRUE)이면 명령의 출력을 R 문자 벡터로 모아 준다는 것 정도죠.

시간을 재는 데는 system.timeproc.time 함수를 쓸 수 있어요. 다만 유닉스 계열이 아닌 플랫폼에서는 얻을 수 있는 정보가 제한적일 수 있어요.

운영체제 환경에서 오는 정보는 다음과 같은 함수들로 읽고 조작합니다.

함수 기능
Sys.getenv OS 환경 변수
Sys.putenv
Sys.getlocale 시스템 로케일
Sys.putlocale
Sys.localeconv
Sys.time 현재 시각
Sys.timezone 시간대

파일 접근 함수도 모든 플랫폼에서 똑같이 쓸 수 있게 한 세트가 제공돼요.

함수 기능
file.access 파일 접근 가능 여부 확인
file.append 파일 이어붙이기
file.choose 사용자에게 파일 이름 입력받기
file.copy 파일 복사
file.create 파일 생성 또는 비우기
file.exists 존재 여부 확인
file.info 파일의 각종 정보
file.remove 파일 삭제
file.rename 파일 이름 바꾸기
file.show 텍스트 파일 보여주기
unlink 파일 또는 디렉터리 삭제

파일 이름과 경로를 플랫폼에 독립적으로 다루는 함수도 따로 있어요.

함수 기능
basename 디렉터리를 뺀 파일 이름
dirname 디렉터리 이름
file.path 파일 경로 구성
path.expand 유닉스 경로의 ~ 확장

7.2 외국어 인터페이스 (Foreign language interfaces)

컴파일된 코드로 R에 기능을 추가하는 구체적인 방법은 Writing R ExtensionsSystem and foreign language interfaces 절을 참고하세요.

.C.Fortran 함수는 R에 (빌드 시점 또는 dyn.load를 통해) 링크된 컴파일 코드를 부르는 표준 인터페이스를 제공해요. 각각 C와 FORTRAN 코드를 겨냥해 만들어진 함수지만, .C는 C 인터페이스를 만들어 낼 수 있는 다른 언어, 예를 들어 C++에도 쓸 수 있어요.

.Call.External 함수는 컴파일 코드(주로 C 코드)가 R 객체 자체를 직접 조작할 수 있게 해 주는 인터페이스예요. .C/.Fortran이 값을 주고받는 수준이라면, 이 둘은 R의 내부 객체에 손대는 더 강력한 길입니다.

7.3 .Internal과 .Primitive

.Internal.Primitive 인터페이스는 빌드 시점에 R에 컴파일된 C 코드를 호출하는 데 씁니다. 이 둘의 차이가 궁금하다면 R Internals.Internal vs .Primitive 절을 보시면 돼요.

더 알아보기