2017-10-31 4 views
0

私は2つの関数のラッパー関数を持っています。各関数には独自のパラメータベクトルがあります。主な考えは、パラメータのベクトル(ベクトルまたは2つのベクトル)をoptimに渡してから、関数の合計を最大化したいと考えています。2つのベクトルのベクトルを使用する方法

私の関数はとても複雑なので、私は私の元の関数に似た簡単な例を提供しようとしました。ここに私のコードは次のとおりです。

このエラーを返す
set.seed(123) 
x <- rnorm(10,2,0.5) 

ff <- function(x, parOpt){ 
    out <- -sum(log(dnorm(x, parOpt[[1]][1], parOpt[[1]][2]))+log(dnorm(x,parOpt[[2]][1],parOpt[[2]][2]))) 
    return(out) 
} 


# parameters in mu,sd vectors arranged in list 
params <- c(set1 = c(2, 0.2), set2 = c(0.5, 0.3)) 

xy <- optim(par = params, fn=ff ,x=x) 

optimは私の機能の各部分にパラメータを渡すことができないため

Error in optim(par = params, fn = ff, x = x) : 
    function cannot be evaluated at initial parameters 

私は理解したように、私はこのエラーを得ました。だから、私はoptimに、最初のベクトルが私の関数の最初の部分のパラメータであり、2番目のベクトルが2番目の部分のためのパラメータであると言うことができます。

+0

@akrunこの問題についてご支援いただきありがとうございます。しかし、それは本当に非常に重要です。だから、それで私を助けてくれますか?あなたのすべてのご意見やご協力をいただければ幸いです。前もって感謝します。 – Alice

答えて

1

初期パラメータを使用するには、メソッドパラメータを変更する必要があります。 ?optimコマンドを使用して、optim関数に関する詳細な説明を読むことができます。 たとえば、 "L-BFGS-B"メソッドを使用して、上限と下限の制約を使用できます。

関連する問題