2016-12-14 150 views
1

我有以下的问题,我有这个data.frame虽然嵌套循环在一个for循环中的R

MeanProb <-structure(list(spp = structure(c(1L, 2L, 4L, 3L, 5L, 6L, 7L, 
9L, 8L, 10L, 11L, 13L, 14L, 15L, 12L), .Label = c("ANPA", "EPFU", 
"EUMA", "EUPE", "LABL", "LACI", "LANO", "MYCA", "MYCI", "MYEV", 
"MYLU", "MYTH", "MYYU", "PAHE", "TABR"), class = "factor"), PSI = c(0.11, 
0.09, 1, 1, 0.28, 0.6, 0.49, 0.1, 0.82, 0.76, 0.73, 0, 0, 0.66, 
0.18), P = c(0.310400865105502, 0.407499355437779, 0.0260179560958289, 
0.00618257990834879, 0.201530599145313, 0.442993326882614, 0.653241682633141, 
0.392164812646201, 0.738867446144311, 0.644245184328625, 0.732752266966217, 
0.144457717963026, 0.028099503540885, 0.654181508254556, 0.299160511936956 
), Days = c(NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, 
NA, NA)), .Names = c("spp", "PSI", "P", "Days"), row.names = c(NA, 
-15L), class = "data.frame") 

我想用下面的公式来填充日列:

s = 1 
a = 0 
while (a < 0.95) { 
    a <- (1-(1-0.3)^s) 
    s = s+1 
} 
print(s) 

这个想法是s将是天,我想用whileProb DataFrame的p值的值替换while循环中的0.3。为了做到这一点我试图让内while循环for循环,但它只是填充日列的第一行:

s = 1 
a = 0 
for (i in 1:NROW(MeanProb)){ 
while (a < 0.95) { 
    a <- (1-(1-MeanProb$P[i])^s) 
    s = s+1 
    MeanProb$Days[i] <- s 
    } 
} 

但只有填充MeanProb $天的第一行。我不知道我在做什么错误

+0

如果您知道其他语言可以试用它,请查看:http://www.pythontutor.com/visualize.html#mode=edit |也许你需要在每次执行while循环后将一个变量重置为初始值? –

回答

4
for (i in 1:NROW(MeanProb)){ 
s = 1 
a = 0 
while (a < 0.95) { 
    a <- (1-(1-MeanProb$P[i])^s) 
    s = s+1 
    MeanProb$Days[i] <- s 
    } 
} 

因为对于每一个新的行,你想从0开始一个从1开始,我测试它;有用。

+0

谢谢@ R-Fever,那是我的蠢事 –

+0

它也是'ceiling(log(0.05)/ log(1-MeanProb $ P))+ 1'而不使用循环。 – ExperimenteR