2011-01-29 14 views
10

के भीतर से .GlobalEnv में वस्तुओं निकालें मैं एक समारोह (CleanEnvir) जो मूल रूप से कहता है हटाने/rm और जो .GlobalEnv से कुछ वस्तुओं को हटा बनाना चाहेंगे।एक समारोह

CleanEnvir <- function(pattern = "tmp"){ 
     rm(list = ls(envir=globalenv())[ 
      grep("tmp", ls(envir=globalenv()))], envir = globalenv()) 
    } 

उत्तर

17

ls() जरूरतों सही जगह पर देखने के लिए:

CleanEnvir <- function(pattern = "tmp"){ 
     rm(list = ls()[grep("tmp", ls())], envir = globalenv()) 
    } 

    keep <- 1 
    tmp.to.be.removed <- 0 
    ls() 

    ## does not work 
    CleanEnvir() 
    ls() 

    ## does work 
    rm(list = ls()[grep("tmp", ls())], envir = globalenv()) 
    ls() 
+0

धन्यवाद, यह काम करता है! मैंने पूरी तरह से एलएस() - भाग को अनदेखा किया ... –

6

आप के साथ-साथ वैश्विक पर्यावरण में अपनी खोज कर वहाँ हटाने की जरूरत है। डिफ़ॉल्ट रूप से यह आपके मामले में फ़ंक्शन CleanEnvir फ़ंक्शन की वर्तमान फ्रेम में दिखता है और इसलिए आपके मूल में केवल "pattern" ढूंढ रहा था।

CleanEnvir <- function(pattern = "tmp") { 
    objs <- ls(pos = ".GlobalEnv") 
    rm(list = objs[grep("tmp", objs)], pos = ".GlobalEnv") 
} 

देता है कौन सा:

एक विशिष्ट चर को दूर:

y <- TRUE 

CleanEnvir <- function(x) {rm(list=deparse(substitute(x)),envir=.GlobalEnv)} 

CleanEnvir(y) 
y 

deparse स्थानापन्न चर चिपकाने के लिए

> CleanEnvir <- function(pattern = "tmp") { 
+  objs <- ls(pos = ".GlobalEnv") 
+  rm(list = objs[grep("tmp", objs)], pos = ".GlobalEnv") 
+ } 
> ls() 
[1] "CleanEnvir"  "foo"    "keep"    
[4] "tmp.to.be.removed" 
> CleanEnvir() 
> ls() 
[1] "CleanEnvir" "foo"  "keep" 
+0

धन्यवाद मैं ls माना कभी नहीं()। ls (envir = globalenv()) द्वारा प्रतिस्थापित किया जाएगा। –

+0

ठीक है। सही लगता है, इसलिए जोड़ा गया, लेकिन जब मैंने इसे पहले परीक्षण किया तो यह काम करना प्रतीत होता था। –

2

सबसे छोटा कोड समाधान मैं इस के लिए मिल गया है इस एक है इसके मूल्य के बजाय नाम, और वास्तव में pos = "aborobalEnv "काम करता है है, लेकिन आप भी बस के माहौल = .GlobalEnv

समाधान 2 का उपयोग कर सकते हैं: यह वास्तव में पैटर्न मिलान के लिए अनुमति देता है। (मैं इसके खिलाफ दृढ़ता से अनुशंसा करता हूं क्योंकि आप संभवतः उन चीजों को हटा सकते हैं जिन्हें आप दुर्घटना से हटाना नहीं चाहते हैं। मैं आप tmp1 और tmp2 को हटाना चाहता हूं लेकिन आप भूल गए हैं कि एक और चर है जिसे ग्लोबल.tmp और localtmp कहा जाता है ।।! उदाहरण

निकालें पैटर्न से: - समस्याग्रस्त होने के रूप में हिस्सा Btw, दूसरा ls() ग्रेप में() भी जरूरत

myvar1 <- TRUE 
myvar2 <- FALSE 

Pat.clean.Envir <- function(x) { rm(list = ls(.GlobalEnv)[grep(deparse(substitute(x)), ls(.GlobalEnv))], envir = .GlobalEnv) } 

Pat.clean.Envir(myvar) 

चियर्स

+0

यह * अन्य उत्तरों की तुलना में छोटा है, लेकिन ओपी में सुझाए गए तर्कों के आंशिक मिलान की अनुमति नहीं देता है। – BenBarnes

+0

ठीक है मैंने एक समाधान संपादित किया जो ऐसा करता है। हालांकि, उपयोगकर्ता ने शीर्षक या वर्णनात्मक quesiton में पैटर्न मिलान के लिए कभी नहीं पूछा। केवल अपने कोड में एक दृष्टिकोण है जिसमें पैटर्न मिलान शामिल है। जैसा कि मेरे उत्तर में बताया गया है, मैं आंशिक पैटर्न मशीनिंग के खिलाफ दृढ़ता से अनुशंसा करता हूं क्योंकि यदि आप गलत करते हैं, तो आप गलत चर हटा देंगे। इसे 1 अक्षर के पैटर्न के साथ मज़ेदार के लिए चलाएं: दुर्घटना से "ए", और आपके चर का 80% चला गया है। – Mark