首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >有没有人可以检查我的代码,看看为什么弹出这个消息"Error: Can not find function "N1"“

有没有人可以检查我的代码,看看为什么弹出这个消息"Error: Can not find function "N1"“
EN

Stack Overflow用户
提问于 2013-04-17 12:20:11
回答 2查看 165关注 0票数 1

我知道这是一个简单的解决办法,但谁能看看它:

代码语言:javascript
复制
a12= 0
a21= 0
K1= 1000
K2= 600
r1= 0.2
r2= 0.1
N1= ((K1 - a12*K2)/(1 - a12*a21))
N2= ((K2 - a21*K1)/(1 - a21*a12))
for(t in 1:80){
  N1[t+1]= N1(t) + r1*N1(t)*(K1 - N1 - a12*N2)/K1
  N2[t+1]= N2(t) + r2*N2(t)*(K2 - N2 - a21*N1)/K2
}
## Error: could not find function "N1"

已更正的代码:

代码语言:javascript
复制
N1= rep(0,80)
N2= rep(0,80)
a12= 0
a21= 0
K1= 1000
K2= 600
r1= 0.2
r2= 0.1
N1[1]= ((K1 - a12*K2)/(1 - a12*a21))
N2[1]= ((K2 - a21*K1)/(1 - a21*a12))
for(t in 1:80){
N1[t+1]= N1[t] + r1*N1[t]*(K1 - N1[t] - a12*N2[t])/K1
N2[t+1]= N2[t] + r2*N2[t]*(K2 - N2[t] - a21*N1[t])/K2
}
plot(1:81, N1, type="l", lwd=3, xlab="Time")
lines(1:81, N2, lwd=3, col='red')

当我运行我的图时,我更改了a12和a21的值,它们看起来像我可能预期的那样,因为它们模拟了两个物种之间的竞争。

我正在运行的三个模型:

代码语言:javascript
复制
no competition-        a12=0     a21=0
stable coexistence-    a12=0.25  a21=0.1
competitive exclusion- a12=0.25  a21=0.75
EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2013-04-17 13:10:55

@e4e5f4是正确的,因为你的主要问题是你使用的是(圆括号,而你需要的是[方括号。

但是,除此之外,在for循环中还存在一个问题:

代码语言:javascript
复制
 # this is a problem, even with brackets corrected
 N1[t+1]= N1[t] + r1*N1[t]*(K1 - N1 - a12*N2)/K1
 N1[t+1]= N1[t] + r1*N1[t]*(K1 - N1 - a12*N2)/K1
                                 ^        ^
                          N1 & N2 are vectors

因为R中的大多数数学运算都是向量化的,所以赋值(即等式的右侧)是一个向量,它的长度在每次迭代中都在增长。

您看到的后续警告来自于试图将多个值(即一个向量)赋给一个向量的单个元素。

如果您尝试,您将看到相同的错误

代码语言:javascript
复制
 foo <- c(17, 23, 31)
 foo[3] <- 1:10

因为你正在迭代,所以你得到了158个这样的警告。

您很可能希望对这些值进行索引(可能使用N1[[t]]N1[[t-1]]等)

票数 0
EN

Stack Overflow用户

发布于 2013-04-17 12:26:00

N1[t]替换N1(t)。对N2执行相同的操作。

注意:我认为您正在使用与R语法不同的Matlab语法进行数组索引。

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/16051410

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档