2016-05-26 14 views
0

Rでは、関数を定義するときに変数の値を定数として使用するにはどうすればよいですか?ループではR - 変数の値を定数として扱う方法

は、私のような何かをしたい:

theta <- vector[n] 

f <- function(x) 
{ 
    v <- theta * x 
    return(v) 
} 

をしかし、私は、これは、関数の定義を変更する必要があり、後でシータを再定義することはできないとする必要がありますか?私はget()を調べましたが、これは同じ問題になります。あなたはこのような何か試すことができます

+2

を、機能があなたの地球環境の定数に依存してはいけません。この場合、 'f'は' theta'と 'x'の両方の関数でなければなりません。関数*をループの中に定義するのは非常に奇妙なケースです。ループの外側で関数を定義し、ループの中で 'f(x、theta [i])'を使用します。 – Gregor

+0

あなたの返事をありがとう、それは理にかなっています。 – Conor

答えて

3

:一般

f <- function(theta) { 
    t <- theta 
    function(x) t * x 
} 
theta <- 5 
g <- f(theta) 
# g is now a function that multiplies its argument by 5 
g(2) 
#[1] 10 
# Now try to modify theta in the global environment 
theta <- 6 
# g doesn't change 
g(2) 
#[1] 10 
+3

これは_closure_の簡単な例であることに言及しておきます。 – rbm

+0

ありがとう! tは関数のローカルなので、これは機能しますか? Rを実行するときにg(?)を評価するたびにfを通過するのではなく、関数gを設定するだけで正しいのでしょうか? – Conor

+0

はい 'g'には独自の関連環境があります(たとえば' print(g) 'と入力すれば分かります)。ハドレーの本http://adv-r.had.co.nz/Functional-programming.htmlにはたくさんの情報があります。 – konvas

関連する問題