2013-10-02 10 views
12

, biz bu 3 işlevi vardır:R ortamında ortam nasıl kilitlenir? R Ciltleme ve Çevre Düzenlemeleri ile oynamak

  1. lockEnvironment(env) kilitler env böylece env yeni bir sembol ekleyemezsiniz.
  2. lockBinding(sym, env) env içindeki sym'ı kilitler; böylece, bu modemi değiştiremezsiniz.

Çevreyi nasıl açabilirim? Belki bir şeyi özlüyorum ama env'nin kilidini açmak için R unlockEnvironment işlevini veya eşdeğer mekanizmasını açığa çıkarmıyor gibi görünüyor mu? Bunun bazı tasarım sebepleri var mı? İşte

bu işlevleri nasıl kullanılacağına ilişkin bir örnek:

e <- new.env() 
lockEnvironment(e) 
get("x",e) 
assign("x",2,envir=e) 
lockBinding("x", e) 
get("x",e) 
unlockBinding("x", e) 
assign("x",3,envir=e) 

## how to relese e lock? 
unlockEnvironment(e) ## the function doesn't exist 

cevap

12

Winston Chang yanıtlandıysa a Gist var gibi gözüküyor.

0

Yapabileceğim en iyi şey, yeni kilitlenmemiş bir ortam oluşturmaktır. Tüm alanları kopyalayabilir veya mevcut olanı yenisinin ebeveyni yapabilirsiniz. Bu, tüm mevcut değişkenlerin miras alındığı anlamına gelir.

unlockEnvironment <- function (env) { 
    return (new.env(parent=env)) 
} 

e <- unlockEnvironment(e)