0

ループを介してデータ フレームを実行し、各行で関数を実行して、列estll、およびul結果を更新しようとしています。私のデータフレームはonch. estll、およびの結果ulが各行で同じであることを除いて、ループは機能しているようです(おそらく最後の反復)。どんな考えでも大歓迎です!

for (i in 1:nrow(onch)) {
   row <- cbind(onch$c1, onch$c2, onch$c3)
   pr1 <- removal(row)
   a <- summary(pr1)
   onch$est <- a[1]
   b <- confint(pr1)
   onch$ll <- b[1]
   onch$ul <- b[2]
}

データフレームは次のようになります。

オンチ

    site    date      c1   c2  c3   est   ll   ul
1   H1     7/11/12    6     2   1   NA     NA   NA
2   H2     7/15/12    12    4   0   NA     NA   NA

お手伝いありがとう!私はまだnrow copyの問題を解決していませんが、これはうまくいきます:

for (i in 1:nrow(onch)) {

row <- cbind(onch$c1[i], onch$c2[i], onch$c3[i])
pr1<- removal(row)
a<- summary(pr1)
    onch$est[i] <- a[1]
b <- confint(pr1)
    onch$ll[i] <- b[1]
    onch$ul[i] <- b[1,2]
 }
4

4 に答える 4

0

を使用した高速なソリューションがdata.tableあり、ループは必要ありません。

library(data.table)
library(FSA)

setDT(onch)

onch[, v_est := summary(removal(c(c1, c2, c3)))[1] , by= site]
onch[, v_ll := confint(removal(c(c1, c2, c3)))[1] , by= site]
onch[, v_ul := confint(removal(c(c1, c2, c3)))[1,2] , by= site]
于 2016-05-27T20:46:33.610 に答える
0

で与えられた質問と回答から利益を得ることができると思います: How to optimize the following code with nested while-loop? マルチコアのオプション?

この質問では、関連する原則の多くについて説明し、コードを最適化 (ベクトル化) して実行を改善する方法についても示します。

于 2012-12-26T20:09:27.947 に答える
0

この回答を編集して説明します。それまでの間、これを試してみてください。私は FSA パッケージを持っていないので ( install.packagesR 2.15.2 では利用できないと私に怒鳴っています)、テストしていません。

onch.removal <- lapply(1:nrow(onch),function(x) {
    pr1 <- removal(c(onch[x,"c1"],onch[x,"c2"],onch[x,"c3"]))
    return(list(est=summary(pr1)[[1]],ll=confint(pr1)[1],ul=confint(pr1)[2]))
})
onch <- data.frame(onch,onch.removal)
于 2012-12-26T20:44:28.617 に答える