2017-03-11 11 views
2

私はHadleyのAdvanced Rを読んでいます。第8章では、rm()を使用して環境からオブジェクトを削除できると述べています。しかし、私はそれを取り除いた後でもオブジェクトを見ることができます。我々は上記を参照できるように、理想的には、私はFALSEを返すことexists("c", envir = e)を期待していると思います環境からオブジェクトを削除するR

e<- new.env() 
e$a<-1 
e$b<-2 
e$.a<-3 
e$c<-4 
ls(e,all.names = TRUE) 

#remove the object c 
rm("c",envir = e) 
ls(e,all.names = TRUE) #Doesn't exist here 

#does the variable exist? 
exists("c",envir = e) #Shows TRUE. Why is this? 
exists("m",envir = e) #FALSE 

ls(e,all.names = TRUE) 
ls(e) 

は、ここに私のコードです。

どのような考えですか?前もって感謝します。

+1

問題を使用して代わりにしてみてくださいしているようです。 Rのすべての関数名 –

答えて

3

help(exists)から:

inheritsTRUEで、値が指定された環境でxのため見つからない場合は名前xに遭遇するまで、環境の囲むフレームが検索されます。

変数に名前を付けるときは注意してください。基本機能c()と競合しています。 inherits = TRUEがデフォルトであるため、囲む環境が検索され、この場合は基本機能c()が見つかり、結果はTRUEとなります。そのため、環境変数のみを検索して終了するには、inherits = FALSEを使用してください。

exists("c", envir = e, inherits = FALSE) 
# [1] FALSE 
1

は、あなたの問題は、その電子の$ cはNULL値を使用すると、「C」、「T」、「DF」を使用している場合も存在します

exists("c", envir = e, inherits = FALSE) 
関連する問題