8.2 R 바이너리(binary) 파일 입출력

R 작업공간에 존재하는 한 개 이상의 객체들을 저장하고 읽기 위한 함수

  • R 데이터 관련 바이너리 파일은 한 개 이상의 객체가 저장된 바이너리 파일인 경우 *.Rdata 형태를 갖고, 단일 객체를 저장할 경우 보통 *.rds 파일 확장자로 저장

  • *.Rdata 입출력 함수

    • load(): *.Rdata 파일 읽어오기
    • save(): 한 개 이상 R 작업공간에 존재하는 객체를 .Rdata 파일로 저장
    • save.image(): 현재 R 작업공간에 존재하는 모든 객체를 .Rdata 파일로 저장
# 현재 작업공간에 존재하는 모든 객체를 "output" 폴더에 저장
# output 폴더가 존재하지 않는 경우 아래 명령 실행
# dir.create("output") 
ls()
 [1] "codebook"       "dbp"            "dbp2"           "def.chunk.hook"
 [5] "diab"           "hook_output"    "input1"         "input2"        
 [9] "plasma"         "varname"       
save.image(file = "output/all_obj.Rdata")

rm(list = ls()) 
ls()
character(0)
# 저장된 binary 파일(all_obj.Rdata) 불러오기
load("output/all_obj.Rdata")
ls()
 [1] "codebook"       "dbp"            "dbp2"           "def.chunk.hook"
 [5] "diab"           "hook_output"    "input1"         "input2"        
 [9] "plasma"         "varname"       
# dnp, plasma 데이터만 output 폴더에 sub_obj.Rdata로 저장
save(dbp, plasma, file = "output/sub_obj.Rdata")
rm(list = c("dbp", "plasma"))
ls()
[1] "codebook"       "dbp2"           "def.chunk.hook" "diab"          
[5] "hook_output"    "input1"         "input2"         "varname"       
# sub_obj.Rdata 파일 불러오기
load("output/sub_obj.Rdata")
ls()
 [1] "codebook"       "dbp"            "dbp2"           "def.chunk.hook"
 [5] "diab"           "hook_output"    "input1"         "input2"        
 [9] "plasma"         "varname"       

  • *.rds 입출력 함수
    • readRDS()/ saveRDS(): 단일 객체가 저장된 *.rds 파일을 읽거나 저장
    • 대용량 데이터를 다룰 때 유용함
    • read.table() 보다 데이터를 읽는 속도가 빠르며, 다른 확장자 명의 텍스트 파일보다 높은 압축율을 보임
# 대용량 파일 dataset/pulse.csv 불러오기
# system.time(): 명령 실행 시가 계산 함수
system.time(pulse <- read.csv("dataset/pulse.csv", header = T))
 사용자  시스템 elapsed 
  4.970   0.058   5.030 
# saveRDS()함수를 이용해 output/pulse.rds 파일로 저장
saveRDS(pulse, "output/pulse.rds")
rm(pulse); ls()
 [1] "codebook"       "dbp"            "dbp2"           "def.chunk.hook"
 [5] "diab"           "hook_output"    "input1"         "input2"        
 [9] "plasma"         "varname"       
system.time(pulse <- readRDS("output/pulse.rds"))
 사용자  시스템 elapsed 
  0.086   0.000   0.087