#r #loops #for-loop #simulation
#r #циклы #for-loop #Симуляция
Вопрос:
Я пытаюсь заставить цикл for работать. У меня есть другие итерации этого кода, но я не могу понять, почему эта конкретная версия работает некорректно.
result <- data.frame(matrix(nrow = 101, ncol = 2))
colnames(result) <- c("i", "Ratio")
for (i in seq(0, 2, length.out = 101)){
p <- (1-pnorm(.5 i))/(1-pnorm( i ))
result[i, 1] <- i
result[i, 2] <- p
}
result
for (i in seq(0,2, length.out = 101)){
p <- (1-pnorm(.5 i))/(1-pnorm( i ))
print (p)
}
Первый блок кода выдает фрейм данных с 2 записями, а остальные NA . Второй работает. Изменение seq с (0,2) на (0,3) дает фрейм данных с 3 записями, (0,4) с 4 записями и так далее.
Я действительно пытаюсь понять, что вызывает такое поведение в моем коде.
Комментарии:
1. ваши
i
значения следующие: 0, 0.02, 0.04 и т.д… поэтому, когда вы это делаетеresult[i,1]
, в data.frame нет 0.02-й строки. Индексы строк должны быть целочисленными значениями.2. @MrFlick вау, если бы это была змея, она бы меня укусила.
Ответ №1:
просто используйте
counter<-0
for (i in seq(0, 2, length.out = 101)){
p <- (1-pnorm(.5 i))/(1-pnorm( i ))
result[counter, 1] <- i
result[counter, 2] <- p
counter<-counter 1;
}
result