2016-04-14 7 views
1

パラメータに基づいて別の関数をreutnする関数を作成しません。以下の表にあるように、method = 'local'のときは正しい数値を返しますが、method = 'emep' & n = 0を選択した場合はfunction(V) {(281* V ^-0.63)*det[1,1]}を返しますが、function(V) {(281* V ^-0.63)*det[i,j]}を返します。 これをどのように修正できますか?return r式の数値を持つ関数

f <- function(i,j, method,n, V,...){ 
     fen <- matrix(data=runif(50*25),nrow=50,ncol=25) 
     det <- matrix(data=runif(50*25),nrow=50,ncol=25) 
     ifelse(method=='local', 
      return(fen[i,j]*det[i,j]), 
      ifelse((method=='emep' & n == 0), 
      return(function(V) {(281* V ^-0.63)*det[i,j]}),'na')) 
    } 


f(1,1,'local') 
f(1,1,'emep',0) 


function(V) {(281* V ^-0.63)*det[i,j]} 
<environment: 0x609af48> 

ありがとうございました!

+0

をあなたは 'アウト<-f返される関数評価された場合(1,1、「EMEPを」、0); out(1) '、それは動作しませんか? – user5219763

+0

それは私が探しているものではありません。私が '<-f(1,1、 'emep'、0)を実行すると、 out(1) '、それは数値を返しますが、代わりに式F(V)が必要です。 – xhie

+0

また、ここで 'ifelse()'を使わないでください。プログラム制御のために 'if'と' else'を使います。 'ifelse()'はベクトルに対する操作です。 – Thomas

答えて

1

これは可能かどうかわかりません。 Rは数式定義を印刷したり、数式を評価したりしますが、与えられた引数で数式を印刷するとは思われませんが、未評価です。それが足りる場合は、カンニングとpasteを使用して文字列をプリントアウトすることができます:

return(paste0("function(V) {(281* V ^-0.63)*det["i",",","j,"]}"),'na')) 
+1

最初は動作しませんでしたが、eval(parse(text = paste0( "...")))を追加して、完全に動作しました。ありがとう – xhie