본문 바로가기
R

[R.아르] 객체 지우기 rm() / 특정 문자가 포함된 행 추출하기 grep()

by LightBlogger 2016. 9. 30.

ls()는 현재 사용하고 있는 객체Object 들의 리스트를 보여준다. (ls: list objects)



만일 이 중에 필요 없는 객체를 지우고 싶다면 rm() 명령을 사용하면 된다. (rm: remove)



여러 개의 객체를 지우려면 콤마(,)로 구분하여 입력한다.



삭제할 개체가 너무 많다면


그 목록을 하나의 벡터로 구성하여 rm()에 넣을 수도 있다.


이럴 때는 [list=] 옵션을 사용한다.



이름에 temp가 들어간 객체들만 지우려면 어떻게 해야 할까?


일단 temp가 들어간 객체들의 이름으로 만들어진 벡터가 있어야 한다.



grep() 은 어떤 벡터에서 주어진 문자열을 포함하는 요소의 번호를 반환한다.



ls() 벡터의 2, 3, 4번 요소가 temp를 포함하고 있다는 얘기다.


그러므로 ls()벡터에서 temp를 포함한 요소만 뽑아서 벡터로 만들려면 ls()[grep("temp", ls())] 와 같이 적어주면 된다.



같은 방법을 어떤 데이터 프레임에서 원하는 문자열이 포함된 행을 뽑을 때도 사용할 수 있다.


예를 들어 다음과 같은 x에서



'app'이 포함된 행만 찾고 싶다면 grep("app", x$name)을 활용하면 된다.



1, 2, 5번째에 있다고 하니, x의 1, 2, 5 행만 다음과 같이 뽑으면 되는 것이다.



참고로 grep()은 정규표현식을 지원한다.


만일 app으로 시작하는 문자를 포함한 행만 뽑고 싶다면


위와 같이 ^를 사용하여 추출하면 된다.



다시 ls()로 돌아가서 temp가 들어간 객체의 삭제를 마무리해 보자.



위와 같이 temp가 들어간 객체들의 이름으로 이루어진 벡터를 얻었으니


이제 이 벡터를 rm()에 넣으면 원하는 벡터만 지울 수 있다.




특정 객체들만 남기고 모든 객체를 삭제하려면?


2016/09/23 - [R] - [R. 아르] 리스트에 없는 항목만 추출하기 (차집합, setdiff()) 에서 본 setdiff()를 이용하면 된다.


다음과 같이 입력하면 ls()에서 x, y, z를 제외한 모든 객체를 출력할 것이므로



이것을 rm()의 [list=]에 넣으면 된다.







팁:


연습삼아 grep()을 이용했지만, 사실 ls() 자체에서 [pattern=] 옵션을 지원한다.



그러므로 가장 짧은 코드는 다음과 같다.



반응형

댓글