7장 시스템 및 외국어 인터페이스
7장 시스템 및 외국어 인터페이스
R은 밖으로 나가는 문과 안으로 들어오는 문, 두 개를 가지고 있어요. 하나는 운영체제와 소통하는 시스템 인터페이스, 다른 하나는 C나 FORTRAN 같은 다른 언어로 짠 코드를 R 안에서 불러 쓰는 외국어(포린) 인터페이스죠. 함께 넘어가면서 R이 단순한 계산기가 아니라 실제 시스템과 연결되는 지점을 살펴볼게요.
출처: R 공식 매뉴얼
본문
7.1 운영체제 접근 (Operating system access)
운영체제 셸에 접근하는 길은 R 함수 system을 통해서예요. 세부 동작은 플랫폼마다 다르고(자세한 내용은 온라인 도움말을 참고하세요), 안전하게 가정할 수 있는 건 대략 두 가지뿐이에요. 첫 번째 인자 command는 (반드시 셸을 거치지 않아도) 실행을 위해 넘겨지는 문자열이고, 두 번째 인자 internal이 참(TRUE)이면 명령의 출력을 R 문자 벡터로 모아 준다는 것 정도죠.
시간을 재는 데는 system.time과 proc.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 Extensions의 System 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 절을 보시면 돼요.
더 알아보기
- R 공식 매뉴얼 (R Language Definition) — 본문 전체
- Writing R Extensions — 컴파일 코드로 R 확장하기
- R Internals — R 내부 구조와 .Internal/.Primitive