본문으로 바로가기

| 서론

R 프로그래밍을 하다보면 시시때때로 메모리 이슈나 연산량 이슈로 R Studio가 죽을 때가 있다.

R에서의 모든 연산은 메모리에 올려놓고 연산을 하게 되는데 이때 R Studio가 강제 kill 될 경우 작업중이던 메모리의 데이터는 전부 소실된다.

R이 메모리에 올려 놓고 연산하기 때문에 빠르기는 해도 메모리에 올릴 수 없으면 연산이 불가능 하다는 단점이 있다.


R종료할 때 다음과 같이 ~/.RData를 저장할 것인지를 묻는데 이 내용이 현재까지 작업한 내역을 RData로 저장할지를 물어보는 것이다.



만약 저장하지 않은 상태에서 R Studio를 열게 되면 모든 자료는 소실된다 

따라서 작업 중간 중간 현재까지 작업 내역을 저장해 놓는다면 R Studio가 비정상 종료된다 해도 그전 내역까지는 살릴 수 있다.


참고로 RStudio는 최초 기동할 때 ~/.RData를 항상 읽도록 되어 있기 때문에 종료직전 저장한 내역까지 다시 읽어올 수 있는 것이다.

R version 3.3.3 (2017-03-06) -- "Another Canoe"

Copyright (C) 2017 The R Foundation for Statistical Computing

Platform: x86_64-w64-mingw32/x64 (64-bit)


R is free software and comes with ABSOLUTELY NO WARRANTY.

You are welcome to redistribute it under certain conditions.

Type 'license()' or 'licence()' for distribution details.


R is a collaborative project with many contributors.

Type 'contributors()' for more information and

'citation()' on how to cite R or R packages in publications.


Type 'demo()' for some demos, 'help()' for on-line help, or

'help.start()' for an HTML browser interface to help.

Type 'q()' to quit R.


[Workspace loaded from ~/.RData]

>

주황색 부분이 읽어 왔다는 부분


| 그럼 언제 활용할 것인가?

사실 이 부분은 사용자 나름일것 같은데, 개인적으로 중요 데이터를 저장하는 용도일 수도 있고

R 코드를 운영단계에 적용시 장애 상황에 대비해 저장할 수도 있다.

추후에 다시 언급하겠지만 R에서도 try ~ catch 구문으로 에러 처리를 할 수 있다.



| RData 저장

iris 데이터를 작업중인 데이터라 가정하고 이를 저장했다가 다시 불러보자

> iris_bak <- iris

> save(iris_bak, file="D:/myTemp/iris_bak.RData")


해당 위치에 가보면 RData 파일이 생성된 것을 알 수 있다.

데이터가 클 수록 이미지 파일도 크기 때문에 적재 완료까지는 잠시 기다려야 할 수 있다.


| RData 읽기

RStudio를 종료한 후 다시 시작해보자. 종료시 RData를 자동저장하지 않고 확인한다.

아마 iris_bak이라는 데이터가 보이지 않을 것이다. 

읽는 코드는 다음과 같다. 

> load("D:/myTemp/iris_bak.RData")


| R의 작업공간 모든 객체 저장하고 읽기

R 객체만의 저장이 아니라 작업 내역을 모두 그대로 저장할 때도 있다.

그럴때는 save.image 함수를 이용한다.

> save.image(file="D:/myTemp/r_workspace.RData")


# 다시 읽을때는 load 를 쓴다

> load("D:/myTemp/r_workspace.RData")



| 결론

기본중의 기본이지만, 

이 기본 기능을 쓰지 않아 낭패보는일 없도록 가끔은 신경써보는 것을 권장한다.


(by Data 쿡북)



좋아요 버튼이 큰 힘이 됩니다.



댓글을 달아 주세요