простой цикл for в r для имитации небольшого набора данных, print result работает нормально, но установка набора данных создает набор данных только с 2 записями

#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