R에서 화일/디렉토리 관리
화일과 디렉토리 관련 함수들
종종 R에서 화일/디렉토리를 생성, 변경, 복사, 삭제해야 할 일이 있습니다. 자주 사용하지 않는 함수라서 잘 기억나지 않는 경우가 많았습니다. 다음에서 R의 화일/디렉토리 관련 함수들을 정리하였습니다.
- 주의!!! : 다음의 코드를 실행하면
__temp
,__temp2
,__temp3
등의 디렉토리, 그리고__temp.txt
라는 화일 등이 수정, 삭제되니 주의하시기 바랍니다.
디렉토리
library(magrittr)
list.dirs(path='.', full.names=TRUE, recursive=TRUE) %>% head(5)
## [1] "." "./.git" "./.git/hooks" "./.git/info" ## [5] "./.git/logs"
list.dirs
를 통해 현재 디렉토리(폴더)의 모든 디렉토리(폴더)를 확인할 수 있다.
다음은 디렉토리를 만들고, 확인하고, 이름을 변경하고, 삭제하는 과정을 보여준다.
unlink("__temp2", recursive=TRUE)
dir.exists('__temp') # 디렉토리 존재 확인
dir.create('__temp') # 디렉토리 만들기
## Warning in dir.create("__temp"): '__temp' already exists
shell('ren __temp __temp2') # 디렉토리 이름 바꾸기 Windows
# shell('mv __temp __temp2') # Linux
# 디렉토리 복사: dir.create(), file.copy()
dir.create('__temp3')
## Warning in dir.create("__temp3"): '__temp3' already exists
file.copy('__temp2', '__temp3', recursive=TRUE)
## [1] TRUE ## [1] TRUE
위의 함수들은 모두 기본적으로 현재 디렉토리(Current directory)를 기준으로 디렉토리를 다룬다. 현재 디렉토리는 다음의 함수를 이용하여 설정할 수 있다.
getwd() # 현재 디렉토리 확인
setwd('.') # 현재 디렉토리 수정
## [1] "D:/git/dataanalysiswithr04"
디렉토리 관련 함수 정리
함수 | 기능 |
---|---|
getwd() |
현재(작업) 디렉토리 |
setwd() |
현재(작업) 디렉토리 설정 |
list.dirs(path='.', ...) |
path 의 디렉토리 나열 |
dir.exists(paths) |
디렉토리 paths 의 존재 여부 |
dir.create(path) |
디렉토리 path 생성 |
shell('ren __temp1 __temp2') |
윈도우에서 디렉토리 이름 변경 |
shell('mv __temp1 __temp2') |
Linux에서 디렉토리 이름 변경 |
dir.copy(from, to) |
사용자 정의 함수(아래 참조). 디렉토리 복사 |
unlink(x, recursive=TRUE) |
디렉토리 x 삭제 |
unlink(x, recursive=TRUE, force=TRUE) |
디렉토리 x 삭제(화일이 읽기 전용이라도) |
스크립트
위에서 디렉토리 복사는 dir.create()
과 file.copy()
를 연속으로 적용하였습니다. 이를 하나의 함수로 만들어서 dir.copy()
라는 함수를 정의하였습니다. 하지만 이 함수를 항상 사용하려면 어떻게 해야 할까요.
한가지 방법은 dircopy.R
이라는 스크립트 화일로 저장한 후에, 나중에 source()
함수로 불러 오는 것입니다. 다음의 코드는 이 방법을 보여줍니다.
txt <- "
dir.copy = function(from, to, checkto= TRUE, overwrite=FALSE, recursive=FALSE, ...) {
if (!dir.exists(from)) {
cat('Directory', from, 'DOES NOT exist.\n')
stop()
}
if (checkto == TRUE) {
if (dir.exists(to)) {
cat('Directory', to, 'exists. checkto=FALSE to copy files to the EXISTING directory.\n')
stop() }
} else {
if (!dir.exists(to)) dir.create(to)
}
if (length(list.files(from, recursive=recursive, ...))==0) {
error('No files to be copied')
} else {
file.copy(from=from, to=to, overwrite=overwrite, recursive=recursive, ...)
}
}
"
writeLines(txt, "dircopy.R")
source('dircopy.R')
스크립트/텍스트 화일 관련 함수 요약
함수 | 기능 |
---|---|
readLines('dircopy.R') |
텍스트 화일 'dircopy.R' 내용 읽기 |
writeLines(text=c('aaa', 'bbb'), con='__temp.txt') |
c('aaa', 'bbb') 를 화일 '__temp.txt' 에 쓰기 |
source('dircopy.R') |
텍스트 화일 dircopy.R 의 내용을 실행하기 |
화일
txt = 'This is test!'
writeLines(text = txt,
con = '__temp.txt')
fn = '__temp.txt'
file.info(fn)
# size : 화일 크기(바이트)
# isdir : 디렉토리 여부
# mode : 읽기/쓰기/실행 가능 여부
# (예. 666 = 모든 사용자 쓰기/읽기 가능
# 777 = 모든 사용자 쓰기/읽기/실행 가능)
# mtime : 마지막 수정 시간
# ctime : 마지막 상태 변화(status change) 시간
# atime : 마지막 접근 시간
# exe : 실행 가능한 파일인가?
## size isdir mode mtime ctime ## __temp.txt 15 FALSE 666 2019-05-18 02:08:16 2019-05-17 16:42:51 ## atime exe ## __temp.txt 2019-05-17 16:42:51 no
file.info()
로 화일 정보를 알아 볼 수 있다.
다음은 화일과 관련된 R 함수를 보여준다.
dir(path='.') %>% head(5) # 현재 디렉토리의 화일들
dir(path='.', recursive = TRUE) %>% head(5) # 현재와 하위 디렉토리의 화일들
file.exists(fn) # 화일 존재 여부 확인
fnCopy=paste0('_',fn)
file.copy(from=fn, to=fnCopy) # 화일 복사
file.rename(from=fnCopy, to=paste0('_',fnCopy)) # 화일 이름 수정
file.remove(paste0('__',fn)) # 화일 삭제
## [1] "_" "__temp().txt" "__temp(3)" "__temp.txt" ## [5] "__temp2" ## [1] "_" "__temp().txt" "__temp.txt" "_Functions.R" ## [5] "_packages.txt" ## [1] TRUE ## [1] TRUE ## [1] TRUE ## [1] TRUE
fn <- file.choose() # 화일 선택기
화일 관련 함수 정리
함수 | 기능 |
---|---|
dir(path='.') |
path 의 디렉토리 화일 나열 |
dir(path='.', recursive=TRUE) |
path 의 디렉토리 안의 모든 디렉토리에 대해 화일 나열 |
file.exists('__temp.txt') |
화일 '__temp.txt 존재 여부 확인 |
file.copy(fn, fn2) |
화일 fn 복사(이름 fn2 로) |
file.rename(fn, fn2) |
화일 fn 이름 변경(이름 fn2 로) |
file.remove(fn) |
화일 fn 삭제 |
file.choose() |
화일 선택기를 사용한 화일 선택 |
화일 이름과 관련된 함수들
R에는 화일 이름과 관련된 조작을 위해 마련된 몇 가지 함수들이 있습니다. 정규표현식보다 간단하게 화일 이름과 관련된 일을 수행할 수 있습니다.
함수 | 기능 |
---|---|
basename(path) |
디렉토리를 포함한 화일이름에서 화일이름만 추출하기 |
dirname(path) |
디렉토리를 포함한 화일이름에서 디렉토리 이름만 추출하기 |
file.path(...) |
"C" ,"__temp" , "__temp.txt" 등을 연결하여 "C:/__temp/__temp.txt" 를 만들어 줌 |
path.expand('~/foo') |
"~" 를 실제 디렉토리 이름을 바꿔줌 |
이상을 통해 R에서 화일/디렉토리를 생성, 변경, 복사, 삭제하는 방법을 알아보았습니다.
Leave a comment