"rm(list = ls()); gc()"と入力するのではなく、ワークスペースとメモリを同時に消去する関数を作成しようとしています。 。しかしrm(list = ls())は、関数内から呼び出されたときには機能しません。どうして?これを回避する方法はありますか?rm(list = ls())は関数内では機能しません。どうして?
> # Let's create an object
> x = 0
> ls()
[1] "x"
>
> # This works fine:
> rm(list = ls()); gc()
used (Mb) gc trigger (Mb) max used (Mb)
Ncells 269975 14.5 592000 31.7 427012 22.9
Vcells 474745 3.7 1023718 7.9 808322 6.2
> ls()
character(0)
>
> ## But if I try to create a function to do exactly the same thing, it doesn't work
> # Creating the object again
> x = 0
> ls()
[1] "x"
>
> #Here's the function (notice that I have to exclude the function name from the
# list argument or the function would remove itself):
> clear = function(list = ls()[-which(ls() == "clear")]){
+ rm(list = list); gc()
+ }
> ls()
[1] "clear" "x"
>
関数内Rは新しい環境を作成するため、グローバル環境では機能しません –
a)関数を実行していません。 b)関数の中で、 'rm'は関数の範囲内でのみ評価されます。したがって、あなたの地球環境では何も削除されません。 '?rm'を見て、それに' envir = '引数があることに気づきましょう。 – thelatemail