2017-11-06 10 views
0

他の人が所有している他の関数f2(x)を呼び出す関数f1(x)を定義したとします。私はf1で定義した変数を、別の引数を渡さずにf2で利用できるようにします。ここで変数スコープが関数Rの内部で実行されています

であり、例:

a<-4 # A global variable 
f2<-function(x,b){ 
    return(a*b*x) #accesses a global variable and one that I want to define inside f1 
} 
f1<-function(x){ 
    b<-2 # Note: I do not want to use b<<-2 because it messes up my .GlobalEnv 
    y = f2(x) # This produces error saying 'b' is undefined 
    return(y) 
} 
f1(10) # This should produce 80 (= 4*2*10) but gives error that 'b' is not defined 

私は任意の入力に感謝します。

ありがとうございます!

+3

あなたが上記の関数でしなかったことの1つは、 'b'の引数' f2() 'を与えることです。デフォルトがないので動作しません。なぜあなたは 'f1 <-function(x){ b <-2 y = f2(x、b) return(y) }'と書くことができませんでしたか? – jacobsg

+0

ありがとう@jacobsg。理由は非常に複雑です。 f2は誰かによって書かれています。私にはたくさんのbがあり、f2のように関数の外で変数を使うようなものがたくさんあります。あなたが提案したことをすれば、私はそれを全面的にやる必要があり、それは非常に時間がかかるでしょう。考えをより複雑にするために、私はすべてのbを認識していません。試行錯誤によってのみ、すべてのbを1つのf2で見つけることができます。 – user1288502

答えて

0

こんにちは、辞書的スコープを使用しています。つまり、関数が定義されているスコープ内で使用可能なすべての変数に関数がアクセスできることを意味します。

あなたがしたいことは、このようなものです。

a<-4 # A global variable 

f1<-function(x){ 
    b<-2 # Note: I do not want to use b<<-2 because it messes up my .GlobalEnv 
f2<-function(x){ 
    return(a*b*x) #accesses a global variable and one that I want to define inside f1 
} 
    y = f2(x) # This produces error saying 'b' is undefined 
    return(y) 
} 
0

wwwの深い潜水後、私は私の質問に答えました。あなたが関数のそれぞれは、.Rファイルに書かれていることを前提としていた場合は、f1内にこれを呼び出すことができますし、それは問題が修正されています。

eval(parse(file = 'path to f2.R')) 

これは、本質的にf1内部f2を再定義します。 sourceはここでは機能しませんでした。

ご意見ありがとうございます。

関連する問題