#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 превышает установленное значение (в зависимости от того, где находится обрыв).