tl;dr: いくつかの非常に特殊なケースを除いて、これで問題ありません
バックグラウンド
Rの.Environment
属性には、Rクロージャ(通常はformulaまたはfunction ) が定義されたコンテキストへの参照が含まれています。R 環境は、リストと同様に、変数の値を保持するストアです。これにより、数式でこれらの変数を参照できます。たとえば、次のようになります。
> f = function(g) return(y ~ g(x))
> form = f(exp)
> lm(form, list(y=1:10, x=log(1:10)))
...
Coefficients:
(Intercept) g(x)
3.37e-15 1.00e+00
この例では、式form
は として定義され、の値をy~exp(x)
与えます。( function への引数である)の値を見つけることができるようにするために、式は function への呼び出し内で構築された環境への参照を保持する必要があります。g
exp
g
f
f
attributes()
次のようにまたはenvironment()
関数を使用して、式に関連付けられた環境を表示できます。
> attributes(form)
$class
[1] "formula"
$.Environment
<environment: R_GlobalEnv>
> environment(form)
<environment: R_GlobalEnv>
あなたの質問
nnet()
関数バリアントを(行列ではなく)式で使用していると思います。
> nnet(y ~ x1 + x2, ...)
残念ながら、R は環境全体 (式が定義されている場所で定義されているすべての変数を含む) を割り当てたままにします。式がそれを参照していなくてもです。環境から何を使用していて、何を使用していないかを言語が簡単に判断する方法はありません。
1 つの解決策は、環境の必要な部分のみを明示的に保持することです。特に、数式が環境内の何も参照していない場合 (これが最も一般的なケースです)、削除しても安全です。
nnet
次のように、を呼び出す前に式から環境を削除することをお勧めします。
form = y~x + z
environment(form) = NULL
...
result = nnet(form, ...)