データのベクトルを別の値に変換する関数(この説明では「foo」)を適用したいとします。この関数はデータを入力として受け取り、Webページにフォームを送信する必要があります。時々、これはすぐに、そして他の時には、それは長い時間がかかることがあります。私はあまりにも時間がかかる項目をスキップする方法でforループ(または同等の適用機能)を実行したいと思います。私は、次を使用して5秒の隣にスキップする前にループが実行される時間を制限することを試みた:R forループ内で関数が処理する時間を制限する
pb <- txtProgressBar(min = 1, max = 100, style = 3)
storage <- matrix(nrow = sample.length, ncol = 2)
for(i in 1:100){
s <- Sys.time()
storage[i,] <- try(foo(data.vec[i]), TRUE)
if (Sys.time() - s >5) {next}
# update progress bar
setTxtProgressBar(pb, i)
}
close(pb)
私はforループの中で、「次へ」の条件を適用する方法を理解してはならないことだと思います。より明確な説明を見つけるために検索しましたが、ここで運が得られません。
foo()は終了する前にSys.timeに戻りません。私はスキップを達成したい、あなたはfoo関数で同様のコードを追加する必要があります。別のスレッドでfooを実行することもできますが、それは簡単ではありません。 –
'evalWithTimeout'の例があります。それ以外の場合:おそらく、実際にWebページを呼び出すために使用している関数(または何でも)に組み込みのタイムアウト引数がありますか?あなたがまだそれをしていない場合は、ドキュメントを掘り起こすほど価値があります。 –