कार्यों को छोड़कर सभी चर निकालें


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)))
जोश ओ'ब्रायन

1
इस उत्तर के लिए बहुत बहुत धन्यवाद। क्या मुझे पता है कि एक अवधि क्या है?
रॉकसाइंस

1
ज़रूर। एक अवधि (अमेरिकी अंग्रेजी में) एक डॉट के लिए एक और नाम है, इस तरह: .यह देखने के लिए कि मैं किस बारे में बात कर रहा हूं, कोशिश करें.j <- 5; ls(); ls(all.names=TRUE)
जोश ओ'ब्रायन

बहुत बहुत धन्यवाद। मैंने पहले से ही ध्यान दिया है कि .j ls () से प्रभावित नहीं था, लेकिन यह समझा सकता है।
रॉकसाइंस

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। (एक साइड नोट पर, अगर मैं उन दोनों के बीच के अंतर को उनके दस्तावेज़ीकरण से समझ सकता हूं, तो मुझे डर लगेगा)।
जोश ओ'ब्रायन

मैं हमेशा
टाइपोफ के

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

मैंने इसे वर्तमान परिवेश के कार्यों से अलग सभी वस्तुओं को हटाने के लिए लिखा था (प्रोग्रामिंग भाषा जिसका उपयोग आर है आईडीई आर-स्टूडियो के साथ):

    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

टिप्पणियाँ-

आरएम (सूची =) में तर्क "सूची" एक चरित्र वेक्टर होना चाहिए।

वर्तमान वातावरण की स्थिति I में एक वस्तु का नाम ls () [i] से प्राप्त होता है और प्राप्त वस्तु (ls () [i]) से ही वस्तु प्राप्त होती है। इसलिए किसी वस्तु का वर्ग वर्ग से लौटाया जाता है (प्राप्त करें (ls () [i]))


कृपया "वर्तमान परिवेश" के बारे में अधिक जानकारी जोड़ें, जैसे कि यह शेल या कुछ निश्चित प्रोग्रामिंग भाषा है
DiveIntoML
हमारी साइट का प्रयोग करके, आप स्वीकार करते हैं कि आपने हमारी Cookie Policy और निजता नीति को पढ़ और समझा लिया है।
Licensed under cc by-sa 3.0 with attribution required.