R의 작업 공간에서 하나를 제외한 모든 객체를 제거하려면 어떻게합니까?


220

많은 객체가있는 작업 공간이 있으며 하나를 제외한 모든 것을 제거하고 싶습니다. 이상적으로는 입력하지 않아도됩니다 rm(obj.1, obj.2... obj.n). 표시 할 수 remove all objects but these ones있습니까?

답변:


374

다음을 사용하여 수행 할 간단한 구성이 있습니다 setdiff.

rm(list=setdiff(ls(), "x"))

그리고 전체 예입니다. 이것을 자신의 위험 부담으로 실행하십시오. 다음을 제외한 모든 변수가 제거됩니다 x.

x <- 1
y <- 2
z <- 3
ls()
[1] "x" "y" "z"

rm(list=setdiff(ls(), "x"))

ls()
[1] "x"

8
여기서 사용되는 기술은 list = to rm을 사용하여 이름 목록 대신 문자 벡터를 rm으로 전달하는 것입니다.
Spacedman

53

패키지 의 keep기능을 사용하는 gdata것이 매우 편리합니다.

> ls()
[1] "a" "b" "c"

library(gdata)
> keep(a) #shows you which variables will be removed
[1] "b" "c"
> keep(a, sure = TRUE) # setting sure to TRUE removes variables b and c
> ls()
[1] "a"

gdata에서 "keep"을 사용하는 것이 더 의미가있는 것으로 보이며 기본 R에있는 comand의 모든 복잡성을 기억하기가 더 쉽습니다.
Darius

47

내가 생각하는 또 다른 옵션은 환경 (이미지 아래)의 상단 오른쪽에 그리드에 개방 RStudio에서 작업 한 후 변경 목록입니다. 그런 다음 지우려는 개체를 선택하고 마지막으로 지우기를 클릭하십시오.

여기에 이미지 설명을 입력하십시오


3
마찬가지로 이름 상자를 클릭하여 모든 파일을 선택한 다음 유지하려는 모든 파일을 선택 취소합니다.
Stephen

27

방금 비슷하지만 약간 다른 질문에 대한 답을 찾기 위해 몇 시간을 보냈습니다. 소수의 벡터를 제외하고 R의 모든 객체 (함수 포함)를 삭제할 수 있어야했습니다.

이를 수행하는 한 가지 방법 :

rm(list=ls()[! ls() %in% c("a","c")])

유지하려는 벡터의 이름은 'a'와 'c'입니다.

이것이 동일한 솔루션을 찾는 사람에게 도움이되기를 바랍니다!


11
이것도 효과가 rm(list=setdiff(ls(), c("a", "c")))있을까요? @Andrie의 답변을 참조하십시오.
hplieninger

17

이름이 패턴과 일치하는 모든 객체를 유지하려면 grep다음과 같이 사용할 수 있습니다 .

to.remove <- ls()
to.remove <- c(to.remove[!grepl("^obj", to.remove)], "to.remove")
rm(list=to.remove)


6

유지하고 싶지 않은 동일한 패턴을 가진 많은 객체가있는 경우 ls()pattern옵션을 활용 합니다.

> foo1 <- "junk"; foo2 <- "rubbish"; foo3 <- "trash"; x <- "gold"  
> ls()
[1] "foo1" "foo2" "foo3" "x"   
> # Let's check first what we want to remove
> ls(pattern = "foo")
[1] "foo1" "foo2" "foo3"
> rm(list = ls(pattern = "foo"))
> ls()
[1] "x"

우와, 위험 해 보인다! 쉘에서 "echo"와 일치하는 패턴을 테스트하는 방법이 있습니까?
DQdlM

1
rm함수는 항상 조심스럽게 사용해야한다고 생각합니다 (쉘에서 더 그렇습니다!). 귀하의 질문에 대한 답변은 내 편집을 참조하십시오.
피터 디아 쿠미스


3

다른 방식으로 생각합시다. 그룹을 제거하려면 어떻게해야합니까? 이 시도,

 rm(list=ls()[grep("xxx",ls())]) 

개인적으로 화면에 너무 많은 테이블, 변수가 마음에 들지 않지만 사용을 피할 수는 없습니다. 따라서 "xxx"로 시작하는 임시 항목의 이름을 지정하므로 더 이상 사용하지 않으면 제거 할 수 있습니다.


2

함수 내에서 함수를 제외한 .GlobalEnv의 모든 객체를 rm

initialize <- function(country.name) {

  if (length(setdiff(ls(pos = .GlobalEnv), "initialize")) > 0) {
    rm(list=setdiff(ls(pos = .GlobalEnv), "initialize"), pos = .GlobalEnv)
  }

}

2

파일 목록 을 유지하려면 다음 을 사용할 수 있습니다.

rm(list=setdiff(ls(), c("df1", "df2")))

1

이건 어때요?

# Removes all objects except the specified & the function itself.

rme <- function(except=NULL){
  except = ifelse(is.character(except), except, deparse(substitute(except)))
  rm(list=setdiff(ls(envir=.GlobalEnv), c(except,"rme")), envir=.GlobalEnv)
}

1

환경에서 df를 제외한 모든 객체를 제거한다고 가정합니다.

rm(list = ls(pattern="[^df]"))

1
# remove all objects but selected
rm(list = ls()[which("key_function" != ls())])

-9

다음은 콘솔에서 모든 객체를 제거합니다.

rm(list = ls())

4
우선, 이것은 요청 된 것이 아닙니다. 둘째, R에서 가능한 모든 방법은 이전 답변에서 다루었습니다. 새로운 질문이있는 다른 사용자를 도와 주셔서 감사합니다. 이 솔루션은 6 년 전에 이미 해결되었으며 그 솔루션은 오늘날에도 여전히 유효합니다.
Joris Meys
당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.