Bir R konsoluna farklı türde nesneler yükledim. Hepsini kullanarak kaldırabilirim
rm(list=ls())
veya yalnızca işlevleri (değişkenleri değil) kaldırın
rm(list=lsf.str())
Sorum şu: işlevler dışındaki tüm değişkenleri kaldırmanın bir yolu var mı
Bir R konsoluna farklı türde nesneler yükledim. Hepsini kullanarak kaldırabilirim
rm(list=ls())
veya yalnızca işlevleri (değişkenleri değil) kaldırın
rm(list=lsf.str())
Sorum şu: işlevler dışındaki tüm değişkenleri kaldırmanın bir yolu var mı
Yanıtlar:
İşte işlevler dışındaki tüm nesneleri kaldıran tek satırlık bir ürün :
rm(list = setdiff(ls(), lsf.str()))
O kullanır setdiff(döndürdüğü gibi küresel ortamda nesnelerin alt kümesini bulmak için ls()modu yok) function(döndürdüğü olarak lsf.str())
.bahsettiğimi görmek için şunu deneyin.j <- 5; ls(); ls(all.names=TRUE)
Gönderilen setdiffcevap güzel. Bir süre önce yazdığım bu ilgili işlevi göndereceğimi düşündüm. Kullanışlılığı okuyucuya kalmış :-).
lstype<-function(type='closure'){
inlist<-ls(.GlobalEnv)
if (type=='function') type <-'closure'
typelist<-sapply(sapply(inlist,get),typeof)
return(names(typelist[typelist==type]))
}
ls.str()Bununla birlikte, nesneler modeyerine test eden kodla ilginç bir karşılaştırma yapar typeof. (Bir yan notta, bu ikisi arasındaki farkı belgelerinden anlayabilirsem, kahrolurum).
İşte bir yerden aldığım ve biraz ayarladığım oldukça kullanışlı bir işlev. Dizinde tutmak güzel olabilir.
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
Bunu, mevcut ortamdaki işlevler dışındaki tüm nesneleri kaldırmak için yazdım (Kullanılan programlama dili IDE R-Studio ile R'dir):
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
attı-
Rm (list =) içindeki "list" argümanı bir karakter vektörü olmalıdır.
Mevcut ortamın i konumundaki bir nesnenin adı ls () [i] 'den ve nesnenin kendisi de get (ls () [i])' den döndürülür. Bu nedenle, bir nesnenin sınıfı sınıftan döndürülür (get (ls () [i]))
rm(list=setdiff(ls(all.names=TRUE), lsf.str(all.names=TRUE)))