Необходимо создать матрицу с неопределенным количеством строк, чтобы цикл for мог записывать значения в матрицу

#r #matrix #random-walk

#r #матрица #случайное блуждание

Вопрос:

Я моделирую прогулку пьяниц в 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 amp; walk[k,2]==0) {
    nReturns = nReturns   1
  }
  k<- k 1
  totalsteps = totalsteps   1
  }
 

}
#nFalls nSuccesses должны суммироваться в
totalsteps
nFalls
Возвращает
успехи

Комментарии:

1. Как насчет того, чтобы создать матрицу с очень большим количеством строк, выполнить вычисления и по завершении удалить неиспользуемые строки?

2. Удалены неприменимые теги. Добавление к списку не является проблемой в Python.

3. Вам не нужна матрица, способная отображать все «проходы», вы можете просто использовать матрицу из двух столбцов или фрейм данных с позициями x и y, а затем выполнять итерацию по строкам, увеличивая или уменьшая на 1 единицу для каждого последующего времени (строки). Тест на падение с обрыва заключается просто в том, что положение x или y превышает установленное значение (в зависимости от того, где находится обрыв).