【问题标题】:R language trouble using "if" command [duplicate]使用“if”命令的R语言问题[重复]
【发布时间】:2021-01-04 18:24:01
【问题描述】:

抱歉这个愚蠢的问题。我正在向我 13 岁的女儿解释一些编程,但在做一个简单的练习时卡住了,重点是循环和逻辑。 我们的想法是使用以下代码创建一个在 0 到 10 之间反弹的“动画”点

a <- 0
for(i in 1:10000){
   if(a == 10){ 
      b <-1
   }
   if(a == 0){
     b <- 0
   }
   if(b == 0){
      a <- a + 0.1
   }
   if(b == 1){
      a <- a - 0.1
   }
   plot(a, ylim = c(0,10))
}

也就是说,我希望当“a”变为 0 时,“b”也变为 0,并且脚本使用加法公式(并且点向上移动),而当“a”等于 10 时,“b”变为1 并激活减法公式(点向下移动)。 然而,显然“if”命令在某些时候永远不会捕捉到“a”等于 10。 我一直试图了解这有什么问题。有什么想法吗?

【问题讨论】:

  • 这是一个浮点精度问题 - 有关讨论和建议,请参阅 the relevant FAQ。举个简单的例子:x &lt;- 0; for(i in 1:100) {x &lt;- x + 0.1}; print(x); x == 10; print(x, digits = 22); print(0.1, digits = 22)

标签: r if-statement logic


【解决方案1】:

这是一个舍入错误。您也可以在表单上找到其他类似的问题。如果您执行了以下操作,它应该可以工作:

a <- 0
for(i in 1:200){
  if(round(a, 10) == 10){ 
    b <-1
  }
  if(round(a, 10) == 0){
    b <- 0
  }
  if(b == 0){
    a <- a + 0.1
  }
  if(b == 1){
    a <- a - 0.1
  }
  plot(a, ylim = c(0,10))
}

【讨论】:

    猜你喜欢
    • 2017-09-15
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2014-03-11
    • 2021-04-24
    • 1970-01-01
    • 2013-05-06
    • 1970-01-01
    相关资源
    最近更新 更多