nlm関数を使用して2つのパラメーターを推定する必要があります。
fit<-nlm(hood2par,c(x01[i],x02[j]),iterlim=300, catch=x[,c(3,4,5)],sp=.5)
hood2par変更されたロジスティックはどこですか
nlmの収束は、これらのパラメーターの開始値に依存します。そのような初期値を見つけるために、私は開始値の2つのベクトルを自動的に生成します
x01 = seq(-10,-20,-0.1)
x02 = seq(0.1,0.9,0.01)
次に、関数の収束につながる値を見つけるために、double for()に含まれるルーチンを作成します:
for (i in 1:length(x01)) { for (j in 1:length(x02)) {
fit <- NULL
try(fit <- nlm(hood2par, c(x01[i],x02[j]), iterlim = 300, catch = x[,c(3,4,5)],
sp = .5),
silent = TRUE)
stopifnot(is.null(fit))}}
私が抱えている問題は、前のルーチンを関数に含めると、次のようになることです。
FFF <- function(x01, x02, catch){
for (i in 1:length(x01)) {
for (j in 1:length(x02)) {
fit <- NULL
try(fit <- nlm(hood2par, c(x01[i], x02[j]), iterlim = 300,
catch = x[,c(3,4,5)], sp = .5),
silent = TRUE) # does not stop in the case of err
stopifnot(is.null(fit))
}
}
return(fit)
}
FFF()から「fit」値を取得できません。
> fit.fff<-FFF(x01,x02,catch)
#Error: is.null(fit) is not TRUE
>fit.fff
fit.fff
Error: object 'fit.fff' not found
以前stopifnot(is.null(fit))は、fitがNULLでない場合にループを停止していました(fitはtry(...)の前にNULLオブジェクトとして定義されているため)。あなたが共有したtryコードに関しては、私はこれが必要です。
res <- try(some_expression)
if(inherits(res, "try-error"))
{
#some code to keep loops running
} else
{
#stop the loops and gather "res"
}
breakcondictionalの2番目の引数に関数を含めようとしましたが、Rバージョンでは実行されません...何か考えはありますか?