#r
#r
Вопрос:
Я хотел бы построить случайное блуждание с определенным количеством инноваций (например, 10000) и неотрицательными значениями.
Я пытался:
Value <- c(100) #initial Value
n <- 10000 #number of innovations
for(i in 1:(n-1)){
Value[i 1] <- Value[i] rnorm(1)
if(Value[i 1] < 0){
repeat{
Value[i 1] <- Value[i] rnorm(1)
}
if(Value[i 1] >0){
break
}
}
}
К сожалению, это не сработает, если значение станет отрицательным. Как я могу это исправить?
Ответ №1:
Я думаю, что есть несколько вариантов. Одним из них является замена repeat
цикла на while
цикл. Вот так:
Value <- c(100) #initial Value
n <- 10000 #number of innovations
for(i in 1:(n-1)){
Value[i 1] <- Value[i] rnorm(1)
while(Value[i 1] < 0){
Value[i 1] <- Value[i] rnorm(1)
}
}
Вы можете проверить, что ни одно значение Value
не является отрицательным с помощью:
any(Value < 0)
Комментарии:
1. Менее подробное решение не выполняет то же самое, что и исходное намерение цикла.
2. Привет @Dason, не могли бы вы расширить свой комментарий? Я проверил, и единственное отличие состоит в том, что более подробный ответ выполняется
rnorm
до тех пор, пока не достигнет неотрицательного значения, в то время как менее подробное преобразование в положительное любой результатrnorm
обоих приводит к случайной серии неотрицательных чисел.3. Оригинал может увеличиваться, а затем уменьшаться. Менее подробная версия всегда будет увеличиваться, и ее невозможно будет уменьшить.
4. Спасибо @Dason за исправление. Я удалил менее подробное решение!
Ответ №2:
Вы можете либо попробовать это
for(i in 1:(n-1)){
Value[i 1] <- Value[i] abs(rnorm(1))}
Или
for(i in 1:(n-1)){
a = rnorm(1)
while(a<0){a = rnorm(1)}
Value[i 1] <- Value[i] a}