while循环内的矩阵条件

时间:2019-10-19 19:31:31

标签: r

考虑以下玩具示例:

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

这里dg都是列向量。 R仅检查第一个元素。 g的第一个元素大于或等于d时,循环终止。但是我的目的是执行循环,直到g的每个元素都大于或等于d。如果我事先知道对象n,则可以将while循环内的条件写为(d[1]>g[1] &d[2]>g[2] &d[3]>g[3])。但是我事先不知道n。我该怎么办?

1 个答案:

答案 0 :(得分:1)

也许您需要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