матричное условие внутри цикла while - PullRequest
0 голосов
/ 19 октября 2019

Рассмотрим следующий игрушечный пример:

set.seed(10)
(n <- sample(5,size=1))
(d <- matrix(sample(1:100, size = n), ncol=1))
(g <- matrix(sample(1:10, size = n), ncol=1))
i <-1

while(d>g){
  cat( "iteration" , i,"\n")
  g <- g+1
  i <- i + 1
}
g

Warning messages:
1: In while (d > g) { :
   the condition has length > 1 and only the first element will be used

Здесь d и g оба являются столбцами-векторами. R проверяет только первый элемент. Как только первый элемент g больше или равен d, цикл завершается. Но я намерен выполнить цикл до тех пор, пока каждый элемент g не станет больше или равен d. Если бы я знал объект n заранее, я бы написал условие внутри цикла while как (d[1]>g[1] &d[2]>g[2] &d[3]>g[3]). Но я не знаю n заранее. Как я могу это сделать?

1 Ответ

1 голос
/ 19 октября 2019

Возможно, вам нужно any:

set.seed(10)
(n <- sample(5,size=1))
# [1] 3
(d <- matrix(sample(1:100, size = n), ncol=1))
#      [,1]
# [1,]   31
# [2,]   43
# [3,]   68
(g <- matrix(sample(1:10, size = n), ncol=1))
#      [,1]
# [1,]    1
# [2,]    3
# [3,]    9
i <- 1

while (any(d>g)) { g <- g+1; i <- i+1; }
i
# [1] 60
g
#      [,1]
# [1,]   60
# [2,]   62
# [3,]   68

Я думаю, что пытаться делать это итеративно, однако, не нужно.

set.seed(10)
n <- sample(5,size=1)
d <- matrix(sample(1:100, size = n), ncol=1)
g <- matrix(sample(1:10, size = n), ncol=1)
(i <- max(d - g) + 1)
# [1] 60
g <- g + i - 1
g
#      [,1]
# [1,]   60
# [2,]   62
# [3,]   68
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...