【问题标题】:matrix condition inside the while loopwhile循环内的矩阵条件
【发布时间】:2019-10-19 19:31:31
【问题描述】:

考虑以下玩具示例:

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]&gt;g[1] &amp;d[2]&gt;g[2] &amp;d[3]&gt;g[3])。但我事先不知道n。我该怎么做?

【问题讨论】:

  • while (any(d &gt; g)) {...}?
  • @r2evans 写while (all(d&gt;g)) 在循环结束时给出g 的值 (9,10,8);当 d=(9,74,76)。 d 的最后 2 个元素仍然大于 g 的最后 2 个元素。
  • any,不是all(我在评论后几秒钟更新了它)

标签: r


【解决方案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

【讨论】:

  • 实际上,我在另一个任务中使用了这个概念,我需要在 while 循环中比较两个向量的每个元素。谢谢。
猜你喜欢
  • 2020-09-17
  • 1970-01-01
  • 2014-06-26
  • 1970-01-01
  • 2017-08-27
  • 1970-01-01
  • 2021-03-30
  • 1970-01-01
  • 2019-10-01
相关资源
最近更新 更多