次の 2 つの関数があるとします。
fInner<-function()
{
# Do some complicated stuff, and...
I<<-I+1
}
fOuter<-function()
{
I<-0
fInner()
print(I)
}
を呼び出すfOuter()
とエラーが発生します: Error in fInner() : object 'I' not found
。それを修正する1つの方法は、例を次のように書き直すことです。
fOuter<-function()
{
fInner<-function()
{
I<<-I+1
}
I<-0
fInner()
print(I)
}
しかし、関数をそのようにネストしたくない場合はどうすればよいでしょうか? 私の場合fInner
、非常に重くて複雑な関数 (ライブラリに移動したいかもしれません) であり、fOuter
実際には 1 つの反復子を定義するアドホックに作成された関数です。私のコードには多くのfOuter
クラス関数が含まれているため、それらをネストするには、fInner
すべての小さなイテレータ定義の内部を複製する必要があります。
解決策は環境に関係しているのではないかと思いますが、その方法がわかりません。誰でも助けることができますか?