2017-10-24 4 views
1

私は100行のforループを持つ関数を持っています。私の関数は警告メッセージWarning message: In f(init, x[[i]]) : longer object length is not a multiple of shorter object lengthを返します。私の関数でオプション(warn = 2)をrに入れよう

しかし、この警告がどこから来るのか分かりません。だから私はこのメッセージを追跡しようとしました。だから、私はこの問題を検索し、私はこの使用してエラーにこの警告を有効にすることができますが見つかりました:

options(warn = 2) 

またはこの

options(error=utils::recover) 

を設定することにより、

をしかし、私は本当にどこ理解していません私はこれらのコードを書く必要があります。
だから、私はどこに私の関数の中でoptions(warn = 2)を書くべきですか? 助けてください?

+1

Woahあります。あなたの機能は意味をなさない。関数に渡された変数 'x'はその中で使われておらず、代わりに関数に渡されなかったたくさんのものが使われます。 –

+0

私の機能は非常にうまく機能します。私はちょうどオプションを置く場所を知りたい。また、あなたは私の質問を読んでください。私はエラーを記述しています –

+2

'options()'はグローバルなので、スクリプトの先頭に置いて一度だけ実行できると私は理解しています。 –

答えて

1

ループ内のどのステップが失敗するのか知りたいですか?もしそうなら、safelypurrrから使うことができます。私は一緒に何かを書くことを試みたが、それが助けてくれるといい。私の例では、xvecとthetaがどうあるべきか分からないので、すべてが失敗します。安全に使用すると、エラーが発生しても実行を継続します。ループ内でprint(i)を使用して、どのステップで失敗するかを確認することもできます。

library(purrr) 

output_list <- vector("list", 100) 

myfunc <- safely(function(x){ 

    fn <- function(theta) { sum (0.5*(xvec - theta[1])^2/theta[2] + 0.5* log(theta[2])) } 
    optim(theta <- c(0,5), fn, hessian=TRUE,method = "L-BFGS-B",lower=c(0,0),control = list(trace=1)) 

    out 

}) 

for(i in 1:100){ 


    output_list[[i]] <- myfunc(rnorm(1)) 

} 

errors <- lapply(output_list, function(x) !is.null(x$error)) %>% unlist 
+0

あなたの答えをありがとう、私は私の質問を更新する –

+2

あなたの環境をクリアし、あなたの例が本当に動作するかどうかを確認してください。シータとxは不明なので – MLEN

+0

それは動作します!しかし、私の質問は、私の質問のすべてのアイデアである 'options(warn = 2)'以外にできるところを示すことです。 –

関連する問題