2016-04-27 22 views
2

変数から決まる定数を使ってRに関数を定義する方法はありますか?私はそれをより良いものにする方法がわからないのでここに例がある。関数内に変数定数を作るR

> index<-3 
> f<-function(x){x+index} 
> f(4) 
[1] 7  #Great! 
> index<-20 
> f(4) 
[1] 24 #No! I still want to see 7! 

ありがとうございます! ?lockBindingため

+4

環境に関するアドバンストRの章は関連しています:http://adv-r.had.co.nz/Environments.html – paljenczy

+1

見たいかもしれないhttp://stackoverflow.com/q/1169534 – BenBarnes

+0

私は最終的にBenbarnesの短期的な取り組みはpaljenczyが示唆しているように環境を読み解いていくことができます。あなたがた両方に感謝します! – Rubarb

答えて

2

可能な解決策は、別の関数の中に、あなたの関数を定義することである。

g <- function(index){ 
    function(x) x + index 
} 
index <- 3 
f <- g(index) 
f(4) 
index<-20 
f(4) 

g(index)の出力が内に定義された関数でありますgの(実行)環境。この関数(f)は、この環境ではindexという値を見ています。ここでは3に固定されています。それが機能する理由ですが、もっと簡単な解決法があるかもしれません。

+0

ありがとうございます!これはBenBarnesが上記のコメントで示唆していたように見えますが、私があなたの解決策を読むまでは、 "それを"得られませんでした。 – Rubarb

2

見て、あなたの答えはhere

index <- 3 
lockBinding("index", globalenv()) 
index <- 4 
#> Error: cannot change value of locked binding for 'index' 
+0

ありがとうございますが、関数が定義された後に "index"の値を変更できるようにしたいと思います。理想的には、関数を見ると、function(x){x + 3}と表示されます。 – Rubarb

関連する問題