【问题标题】:Printing numbers in a sequence given a condition using if and for statement使用 if 和 for 语句在给定条件的序列中打印数字
【发布时间】:2019-02-11 10:05:24
【问题描述】:

我是 r 的新手,如有任何帮助,我们将不胜感激。

我想在某些步骤中获得从 1 到 365 的数字序列。 当我的第一个数字从一个以上的数字开始时,我希望我的代码根据步骤打印 365 之前/之前的数字,然后再次从 1 开始,直到它达到它开始的数字。

firstnumber=20
 steps=10
 lastnumber=0


     if(firstnumber > 1){lastnumber = 365 + firstnumber - (steps)}
     else{lastnumber = 365}

      for(number in seq(firstnumber, lastnumber, steps))
     {
    if(firstnumber > 1)
    { if(number + steps > 365)

    {number = (number + steps - 365)
      }
       }
       print(number)
     }

它应该给我

 20, 30, 40, 50, 60, 70, 80,
 90, 100, 110, 120, 130, 140, 150, 160, 170,
 180, 190, 200, 210, 220, 230, 240, 250, 260,
 270, 280, 290, 300, 310, 320, 330, 340,
 350, 360, 5, 15

但它错过了 360,它是到达序列开头之前的最后一个数字 if 条件有问题吗?还是有其他方法可以做到这一点?

【问题讨论】:

  • 您能否编辑您的帖子并使预期的输出更易于阅读?
  • 我想知道它会打印什么,因为您从未在代码中定义日期...
  • 它无法打印数字 360,因为当数字大于 355(如果步长为 10)时,您的 if 语句 if(number + steps > 365) 会触发。
  • 我已经编辑了我的输出,希望它现在清楚了。
  • 即使我将步长更改为 2,它也不会返回 10、12、14 等输出,直到达到 360,然后应该打印 2、4... 直到 8。但这里再次打印 358 但跳过 360 并移动到 2

标签: r for-loop if-statement


【解决方案1】:
当您需要数字序列“环绕”时,模运算符总是很方便。
firstnumber = 20
step = 10
limit = 365

seq(firstnumber - 1, limit + firstnumber - 1, step) %% limit + 1
#[1]  20  30  40  50  60  70  80  90 100 110 120 130 140 150 160 170 180 190 200 210 220 230
#[23] 240 250 260 270 280 290 300 310 320 330 340 350 360   5  15

如果您想要 0 到 364 范围而不是 1 到 365 范围,请使用:

seq(firstnumber, limit + firstnumber, step) %% limit

【讨论】:

  • 谢谢,这很有用
  • 当我像你一样运行确切的代码时,我得到了序列,但我得到的不是 365,而是 0 firstnumber = 10 step = 5 limit = 365 seq(firstnumber, limit + firstnumber, step) %% limit
  • 如果你希望你的范围从 1 到极限(而不是从 0 到比极限小一),请使用 seq(firstnumber - 1, limit + firstnumber - 1, step) %% limit + 1. 我修改了我的答案以包含这个。很高兴帮助:)
  • 非常感谢。它完全按照我想要的方式工作。
猜你喜欢
  • 1970-01-01
  • 2021-06-11
  • 1970-01-01
  • 1970-01-01
  • 2013-11-05
  • 2018-03-25
  • 2018-04-01
  • 2017-07-31
  • 1970-01-01
相关资源
最近更新 更多