2014-09-22 14 views
6

Son zamanlarda S4 sınıflarıyla çok şey denedim ve çalışma alanımdaki tüm sınıf tanımlarını ve özel yöntemleri temizlemek için R'yi yeniden başlatmanın bir acısı. Açıkçası rm(list=ls(all.names=TRUE)) kullanım dışıdır. Tüm sınıfları ve yöntemleri tek tek satırları yazarak elle kaldırabilirim, ancak eminim ki daha kolay bir yol olmalı.Bir R çalışma alanından tüm özel yöntemleri ve sınıfları nasıl kaldırabilirim?

.myClass <- setClass("myClass", representation=representation(mySlot="numeric")) 
mySlot <- function(x) [email protected] 
setMethod("[", signature=c("myClass", "numeric", "missing"), function(x, i, j, ...) { 
    initialize(x, mySlot=mySlot(x)[i]) 
}) 

deneyin rm() herşeyi kaldırmak için: sorunumu vitrine

bir örnek

rm(list=ls(all.names=TRUE)) 

Ancak sınıf tanımı ve özel yöntemi hala mevcuttur:

> x <- new("myClass", mySlot=1:4) 
> x[1] 
Error in x[1] : could not find function "mySlot" 

mySlot() bir nesne olduğu için h rm, ancak mySlot() referanslı yöntem kalmıştır. Tek bir tıklamayla tüm sınıflarını ve tüm özel yöntemlerini nasıl kaldırılacağını bilmek isterim.

+1

Sınıflar, AFAIK, removeClass() ile. Ancak, sizin durumunuzda otomatikleştirmek için iyi bir yol bilmiyorum. Sınıf isimleri listesindeyseniz, bunu yineleyebilir ve sınıfları removeClass() ile silebilirsiniz. – ddiez

cevap

7

R'nin oturumunuzu hatırlayacağını umuyoruz. Eğer-hepsi ne yaptık izini kaybettim eğer

removeClass("myClass", where=.GlobalEnv) 
removeMethods("[", where=.GlobalEnv) 

veya aşağıdaki kesmek Bu bir açıklamadır

## Class definitions are prefixed by '.__C__' 
mangled <- grep(".__C__", ls(all=TRUE, envir=.GlobalEnv), value=TRUE) 
classes <- sub(".__C__", "", mangled) 
for (cl in classes) removeClass(cl, where=.GlobalEnv) 

## Methods tables are prefixed by '.__T__' 
mangled <- grep(".__T__", ls(all=TRUE, envir=.GlobalEnv), value=TRUE) 
methods <- unique(sub(".__T__(.*):.*", "\\1", mangled)) 
for (meth in methods) removeMethods(meth, where=.GlobalEnv) 
+0

Yapmam gerekeni yapar. Teşekkürler! Temel olarak, R'nin seanstan hiçbir şey hatırlamasını ve yeni başlayabilmesini istedim. –

1

yardımcı olabilir olabilir ama çok uzun bu yüzden olarak koymak olduğunu Bir cevap.

Bir sınıfın tanımını removeClass kullanarak kaldırabilirsiniz. Ancak, bir sınıf tanımının kaldırılması, 'un ilişkili olduğu yöntemleri kaldırmaz. Bir sınıfı gerçekten kaldırmak için, tüm yöntemlerini removeMethod kullanarak kaldırmak için sınıfını kaldırmak gerekir.

Bu sancılı yani ya size sınıfını tanımlamak ve her şey gibi bir şey kullanmak yüklemek için bazı araçlar devtools kullanmak nereye özel bir paket oluşturmak R ya da daha iyi etmektir yeniden başlatın: kaldırılabilir

devtools::load_all(".") 
İlgili konular