这是更大代码的一部分,但由于某种原因,我在我的for循环中遇到了一个奇怪的错误,这是我以前从未见过的。出于某种原因,循环在第一次迭代后卡住了,并且在剩余的27次循环中没有进展。没有错误,只是一个未完成的工作。这是我正在使用的代码:
year = c(1970, 1971, 1972, 1973, 1974, 1975, 1976, 1977, 1978, 1979, 1980, 1981, 1982, 1983, 1984, 1985, 1986, 1987, 1988, 1989, 1990, 1991, 1992, 1993, 1994, 1995, 1996, 1997, 1998)
catch = c(1138, 1183, 1380, 1672, 666, 973, 1118, 2900, 3599, 4218, 5124, 5559, 4891, 5751, 4525, 3592, 2682, 3617, 3458, 3173, 3550, 3987, 3084, 2515, 3162, 4125, 2311, 2694, 3250)
n = length(year)
ssq_CPUE = function(B0, r_input, p_input, K_input) {
pred_B = rep(0, length(year))
# scaling inputs
B0 = B0*1000
r_input = r_input/100
p_input = p_input/1000000000
K_input = K_input*1000
# expected biomass
pred_B[1] = B0
for(i in 2:n){
pred_B[i] = max(pred_B[i-1] + (r_input/p_input) * pred_B[i-1] * (1-(pred_B[i-1]/K_input)^p_input) - catch[i-1], 100)
return(pred_B)
}
}
当我输入
ssq_CPUE(B0 = 42, r_input = 30, p_input = 1, K_input = 27)
我得到以下矢量:
[1] 42000.00 35294.91 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00
[12] 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00
[23] 0.00 0.00 0.00 0.00 0.00 0.00 0.00
它正确地贯穿循环的第一次迭代,但没有剩余的循环。超级奇怪,我不知道为什么。
答案 0 :(得分:1)
你有一个小错字。代码应该是:
year = c(1970,1971,1972,1973,1974,1975,1976,1977,1978,1979, 1980年,1981年,1982年,1983年,1984年,1985年,1986年,1987年,1988年,1989年, 1990年,1991年,1992年,1993年,1994年,1995年,1996年,1997年,1998年)
ssq_CPUE = function(B0, r_input, p_input, K_input) {
pred_B = rep(0, length(year))
# scaling inputs
B0 = B0*1000
r_input = r_input/100
p_input = p_input/1000000000
K_input = K_input*1000
# expected biomass
pred_B[1] = B0
for(i in 2:n){
pred_B[i] = max(pred_B[i-1] + (r_input/p_input) * pred_B[i-1] *
(1-(pred_B[i-1]/K_input)^p_input) - catch[i-1], 100)
}
# This statement needs to be at the end of the function definition
return(pred_B)
}