ফাংশন বাদে সমস্ত ভেরিয়েবল মুছে ফেলুন


113

আমি একটি আর কনসোল বিভিন্ন ধরণের অবজেক্টে লোড করেছি। আমি তাদের ব্যবহার করে সমস্ত মুছে ফেলতে পারি

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 (গুলি) দ্বারা প্রভাবিত হয়নি তবে এটি ব্যাখ্যা করতে পারলাম।
— রকসায়েন্স

7

পোস্ট setdiffউত্তর ভাল। আমি কেবল ভেবেছিলাম এই সম্পর্কিত ফাংশনটি আমি পোস্ট করেছি কিছুক্ষণ আগে wrote এর উপযোগিতা পাঠকের উপর নির্ভর করে :-)।

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
জেনে রাখা ভাল তবে প্রশ্নটি নয়
— রকসায়েন্স

আমার ধারণা, আমার এটিকে মন্তব্য হিসাবে ছেড়ে দেওয়া উচিত ছিল যেহেতু এটি এফআইআইয়ের বেশি ছিল। দুঃখিত।
— 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

মন্তব্য-

আরএম (তালিকা =) এর "তালিকা" যুক্তিটি অবশ্যই একটি অক্ষর ভেক্টর হতে হবে।

বর্তমান পরিবেশের আই পজিশনে থাকা কোনও বস্তুর নাম ls () [i] এবং গৌণ (এলএস () [i]) থেকে ফিরে আসে। সুতরাং কোনও বস্তুর শ্রেণি ক্লাস থেকে ফিরে আসে (get (ls () [i]))


দয়া করে "বর্তমান পরিবেশ" সম্পর্কে আরও তথ্য যুক্ত করুন, উদাহরণস্বরূপ এটি শেল বা নির্দিষ্ট প্রোগ্রামিং ভাষা কিনা
— DiveIntoML
আমাদের সাইট ব্যবহার করে, আপনি স্বীকার করেছেন যে আপনি আমাদের কুকি নীতি এবং গোপনীয়তা নীতিটি পড়েছেন এবং বুঝতে পেরেছেন ।
Licensed under cc by-sa 3.0 with attribution required.