获得;“南”;for循环的结果
首先,很抱歉发了这么长的帖子。我想说得具体点!感谢您的阅读:) 我有两个向量,如下所示:获得;“南”;for循环的结果,r,loops,for-loop,iteration,nan,R,Loops,For Loop,Iteration,Nan,首先,很抱歉发了这么长的帖子。我想说得具体点!感谢您的阅读:) 我有两个向量,如下所示: popd=vector(mode='numeric',100) popr=向量(模式=数值',100) 这些代表了2个种群内的初始分布。 我想定义这些 popd[]=0.01 popr[]=0.01 我还定义了e=0.05,然后总体将根据以下for循环进行变换: loop <- for(i in 1:100) {π <- function(S) {x <- sum(popd[1
popd=vector(mode='numeric',100)
popr=向量(模式=数值',100)
这些代表了2个种群内的初始分布。
我想定义这些
popd[]=0.01
popr[]=0.01
我还定义了e=0.05,然后总体将根据以下for循环进行变换:
loop <- for(i in 1:100)
{π <- function(S)
{x <- sum(popd[1:S])
return((100-S)*x)}
µ <- function(A)
{share <- vector(mode='numeric', (101-A))
share[] = A:100
return(share%*%popr[A:100])}
for(S in 1:100){vectorπ <- vector(mode='numeric', 100)
vectorπ[S]=π(S)}
for(A in 1:100){vectorµ <- vector(mode='numeric', 100)
vectorµ[A]=µ(A)}
av.payoffd <- sum(popd * vectorπ)
av.payoffr <- sum(popr * vectorµ)
newd <- vector(mode='numeric', 100)
for(S in 1:100){newd[S]=(popd[S]/(av.payoffd))}
newr <- vector(mode='numeric', 100)
for(A in 1:100){newr[A]=(popr[A]/(av.payoffr))}
newpopd <- vectorπ * newd
test1[i,2]=(sum(newpopd * (1:100)))
newpopr <- vectorµ * newr
test1[i,4]=(sum(newpopr * (1:100)))
mutationmatrix <- function(e)
{mut <- c(e, 1-(2*e), e)
return(matrix(c(1-e, e, (rep(c(rep098, mut), times=98)), rep098, e, 1-e), nrow=100))}
mutpopd <- function(e)
{mutationmatrix(e) %*% newpopd}
test1[i,3]=(sum(mutpopd(e) * (1:100)))
mutpopr <- function(e)
{mutationmatrix(e) %*% newpopr}
test1[i,5]=(sum(mutpopr(e) * (1:100)))
if(i<100){
popd=mutpopd(e)
popr=mutpopr(e)
}
if(i==100){
for(i in 1:100){
popdistcomp1[i,3]=mutpopd(e)[i,1]
popdistcomp1[i,6]=mutpopr(e)[i,1]}
}
}
及
出于篇幅的考虑,我只展示了前10个条目,但它们的脉络基本相同,尽管我应该说,在mutatedpopr下,popdistcomp1的最后两个条目分别为0.05和0.95
我不确定的是“NaN”条目来自哪里。我猜代码中的某个地方有问题,或者可能是我的循环结构有问题。我是一个完全的初学者,已经使用R大约5天了,所以如果我愚蠢的话,我道歉
谢谢你的帮助
露西开始时的一些建议:
R
是高度矢量化的,因此避免编写大量的“微函数”。首先,您很幸运,像popd
这样的对象恰好对函数可见(因为您没有将它们传递到函数中)。试试看my.pi Hi Carl。非常感谢你的指点。我知道它在for循环中有很多愚蠢的函数——我更希望不是这样,因为打字很糟糕,但我不知道怎么做,有什么建议吗?popd和popr必须用循环定义,否则它将返回并再次获取这些值。我还没打算按回车键。我正在经历循环,希望能找到一些东西。是的,在循环之外定义它们;我的观点是,函数有自己的环境,因此让它们使用未显式作为参数传递给函数的对象是有风险的。我发现了错误!谢谢你,卡尔。你的个人资料也让我笑了,因为它让我看了看那些狗…谁看到它们就笑不出来!所以干杯。很高兴听到你解决了这个问题。希望你喜欢R
;顺便说一句,有一只小狗依偎在你的椅子上,编程总是更有趣!
test1
i meanoffer meanmutoffer meanminaccept meanmutminaccept
[1,] 1 NaN NaN 100 99.95
[2,] 2 NaN NaN 100 99.95
[3,] 3 NaN NaN 100 99.95
[4,] 4 NaN NaN 100 99.95
[5,] 5 NaN NaN 100 99.95
[6,] 6 NaN NaN 100 99.95
[7,] 7 NaN NaN 100 99.95
[8,] 8 NaN NaN 100 99.95
[9,] 9 NaN NaN 100 99.95
[10,] 10 NaN NaN 100 99.95
popdistcomp1
p(i) initialpopd mutatedpopd q(a) initialpopr mutatedpopr
[1,] "p1" "0.01" "NaN" "q1" "0.01" "0"
[2,] "p2" "0.01" "NaN" "q2" "0.01" "0"
[3,] "p3" "0.01" "NaN" "q3" "0.01" "0"
[4,] "p4" "0.01" "NaN" "q4" "0.01" "0"
[5,] "p5" "0.01" "NaN" "q5" "0.01" "0"
[6,] "p6" "0.01" "NaN" "q6" "0.01" "0"
[7,] "p7" "0.01" "NaN" "q7" "0.01" "0"
[8,] "p8" "0.01" "NaN" "q8" "0.01" "0"
[9,] "p9" "0.01" "NaN" "q9" "0.01" "0"
[10,] "p10" "0.01" "NaN" "q10" "0.01" "0"