R пока l oop нужна помощь - PullRequest
0 голосов
/ 20 марта 2020

Итак, я создал время l oop, чтобы задать координатную точку Xm и Ym, которая следует за равномерным распределением, где точка должна находиться в пределах окружности радиуса 25. Ниже приведен код для этого:

outcome<-function()
{
done=0
while(done==0){
  Xm<-runif(1,-25,25)
  Ym<-runif(1,-25,25)
if (Xm^2+Ym^2<=25^2){
    z<-c(Xm,Ym)
    done=1
  }
 }
z
}
outcome()

Теперь мне нужно сделать то же самое, 250 раз. Я изменил код на это:

plotoutcome<-function()
{
  done=0
  while(done==0){
    Xm2<-runif(250,-25,25)
    Ym2<-runif(250,-25,25)
    if (Xm2^2+Ym2^2<=25^2){
      z<-c(Xm2,Ym2)
      done=1
    }
  }
  z
}
plotoutcome()

Однако, когда я запускаю второй код, я получаю это сообщение об ошибке: In if (Xm2 ^ 2 + Ym2 ^ 2 <= 25 ^ 2) {: условие имеет длину> 1, и будет использоваться только первый элемент.

Есть идеи, как это исправить?

1 Ответ

0 голосов
/ 20 марта 2020

Самый простой способ - воспользоваться outcome:

replicate(250, outcome())

Но если нужна новая функция, вот функция plotoutcome:

plotoutcome<-function()
{
  total <- 0
  done <- FALSE
  Xtmp <- numeric(250)
  Ytmp <- numeric(250)
  while(!done){
    Xm2 <- runif(1, -25, 25)
    Ym2 <- runif(1, -25, 25)
    i <- Xm2^2 + Ym2^2 <= 25^2
    if(i){
      total <- total + 1
      Xtmp[total] <- Xm2
      Ytmp[total] <- Ym2
    }
    done <- total == 250
  }
  list(X = Xtmp, Y = Ytmp)
}
do.call(cbind, plotoutcome())
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...