함수를 제외한 모든 변수 제거


113

R 콘솔에 다른 유형의 개체를로드했습니다. 모두 제거 할 수 있습니다.

rm(list=ls())

또는 다음을 사용하여 함수 만 제거하십시오 (변수 제외).

rm(list=lsf.str())

내 질문은 : 함수를 제외한 모든 변수를 제거하는 방법이 있습니까?

답변:


137

다음 함수를 제외한 모든 객체를 제거하는 한 줄입니다 .

rm(list = setdiff(ls(), lsf.str()))

그것은 사용 setdiff(에 의해 반환되는 글로벌 환경에서 개체의 집합 찾아 ls()모드가없는) function(에 의해 반환 lsf.str())


5
이름이 마침표로 시작하는 개체도 제거하려면 다음을 대신 사용하십시오. rm(list=setdiff(ls(all.names=TRUE), lsf.str(all.names=TRUE)))
Josh O'Brien

1
이 답변에 감사드립니다. 기간이 무엇인지 알 수 있습니까?
RockScience 2011

1
확실한. 마침표 (미국 영어)는 다음과 같이 점의 또 다른 이름입니다. .내가 말하는 내용을 보려면 다음 을 시도하십시오.j <- 5; ls(); ls(all.names=TRUE)
Josh O'Brien

좋아요, 감사합니다. 나는 이미 .j가 ls ()의 영향을받지 않는다는 것을 알았지 만 그것을 설명 할 수있었습니다.
RockScience 2011

7

게시 된 setdiff답변이 좋습니다. 얼마 전에 작성한이 관련 함수를 게시 할 것이라고 생각했습니다. 그것의 유용성은 독자에게 달려 있습니다 :-).

lstype<-function(type='closure'){ 
    inlist<-ls(.GlobalEnv)
    if (type=='function') type <-'closure'
    typelist<-sapply(sapply(inlist,get),typeof)
    return(names(typelist[typelist==type]))
}

1
게시 해 주셔서 감사합니다. ls.str()그러나 객체 mode보다는를 테스트하는 코드와의 흥미로운 비교가 typeof됩니다. (참고로, 문서에서 그 둘의 차이점을 알아낼 수 있다면 감히 감히 감히 될 것입니다).
Josh O'Brien

나는 항상 typeof 대신 클래스를 사용합니다.
RockScience 2011

1

다음 명령을 사용하여 모든 변수를 지울 수 있습니다. 변수를 되 찾을 수 없으므로주의하십시오.

rm(list=ls(all=TRUE))

1
알아두면 좋지만 그게 문제가 아닙니다
RockScience

나는 그것이 FYI에 더 가깝기 때문에 그것을 코멘트로 남겨 두어야한다고 생각한다. 죄송합니다.
lwileczek

0

여기 내가 어딘가에 집어 들고 약간 조정 한 매우 편리한 기능이 있습니다. 디렉토리에 보관하는 것이 좋을 수 있습니다.

list.objects <- function(env = .GlobalEnv) 
{
    if(!is.environment(env)){
        env <- deparse(substitute(env))
        stop(sprintf('"%s" must be an environment', env))
    }
    obj.type <- function(x) class(get(x, envir = env))
    foo <- sapply(ls(envir = env), obj.type)
    object.name <- names(foo)
    names(foo) <- seq(length(foo))
    dd <- data.frame(CLASS = foo, OBJECT = object.name, 
                     stringsAsFactors = FALSE)
    dd[order(dd$CLASS),]
}

> x <- 1:5
> d <- data.frame(x)
> list.objects()
#        CLASS       OBJECT
# 1 data.frame            d
# 2   function list.objects
# 3    integer            x 
> list.objects(env = x)
# Error in list.objects(env = x) : "x" must be an environment

0

현재 환경에서 함수를 제외한 모든 개체를 제거하기 위해 이것을 작성했습니다 (사용되는 프로그래밍 언어는 IDE R-Studio가있는 R입니다).

    remove_list=c()                             # create a vector

      for(i in 1:NROW(ls())){                   # repeat over all objects in environment
        if(class(get(ls()[i]))!="function"){    # if object is *not* a function
         remove_list=c(remove_list,ls()[i])     # ..add to vector remove_list
         }    
      }

    rm(list=remove_list)                        # remove all objects named in remove_list

노트-

rm (list =)의 "list"인수는 문자형 벡터 여야합니다.

현재 환경의 i 위치에있는 객체의 이름은 ls () [i]에서 반환되고 객체 자체는 get (ls () [i])에서 반환됩니다. 따라서 객체의 클래스는 class (get (ls () [i]))에서 반환됩니다.


"현재 환경"에 대한 자세한 정보를 추가하십시오. 예를 들어 이것이 쉘인지 특정 프로그래밍 언어인지 여부
DiveIntoML
당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.