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


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.