首页 > 解决方案 > 需要创建一个具有未指定行数的矩阵,以便 for 循环可以将值写入矩阵

问题描述

我正在模拟 2D 中的醉汉行走(随机行走的一种变体,如果醉汉从悬崖上掉下来就结束)。我需要知道是否有任何方法可以在不指定最初行数的情况下创建矩阵“walk”。我在想可能有一种方法可以使用数据框来做到这一点,但无法弄清楚。有人请帮忙。代码如下

#specifying parameters
nSims<- 1000

#defining walk as vector of unspecified length
walk<- matrix(NA, nrow= 999999, ncol=2)
rstep<- matrix(c(1, 0, -1, 0, 0, 1, 0, -1), nrow=4, ncol=2, byrow=TRUE)

#setting counters
nReturns<- 0
nFalls<- 0
nSuccesses<- 0
totalsteps<- 0
#setting seed number
#set.seed(77077)

#simulating trajectories until hitting N or 0

for (i in 1:nSims) {
walk[1,]<- c(0,0)
k<- 2
nsteps<- 0
repeat {
  walk[k,]<- walk[k-1,]+rstep[sample(1:4, size=1),]
  nSteps = nSteps + 1
  if(nSteps==9999){
    nSuccesses = nSuccesses + 1
    break
  }
  else if (walk[k,1]==30) { 
    nFalls = nFalls + 1
    break
  }
  else if(walk[k,1]==0 & walk[k,2]==0) {
    nReturns = nReturns + 1
  }
  k<- k+1
  totalsteps = totalsteps + 1
  }

} #nFalls + nSuccesses 应该加起来为 totalsteps nFalls nReturns nSuccesses

标签: rmatrixrandom-walk

解决方案


推荐阅读