使用if和for语句按给定条件的顺序打印数字

使用if和for语句按给定条件的顺序打印数字,r,for-loop,if-statement,R,For Loop,If Statement,我是r的新手,任何帮助都将不胜感激 我想在某些步骤中获得从1到365的数字序列。 当我的第一个数字从多个数字开始时,我希望我的代码根据步骤将数字打印到365之前,然后再次从1开始,直到它达到开始的数字 firstnumber=20 steps=10 lastnumber=0 if(firstnumber > 1){lastnumber = 365 + firstnumber - (steps)} else{lastnumber = 365} for

我是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条件是否有问题?或者有其他方法可以做到这一点吗?

当您需要数字序列“环绕”时,模运算符总是很方便的。 如果希望0到364范围而不是1到365范围,请使用以下选项:

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

当您需要数字序列“环绕”时,模运算符总是很方便。 如果希望0到364范围而不是1到365范围,请使用以下选项:

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


你能编辑你的帖子并使预期的输出更容易阅读吗?我想知道它会打印任何东西,因为你从未在代码中定义日期…它不能打印数字360,因为当数字大于355(如果你的步长为10)时,你的if语句if(number+steps>365)会触发。我编辑了我的输出,希望它现在清晰。即使我将步长更改为2,它也不会返回10、12、14等输出,直到它达到360,然后应该打印2、4。。。直到8点。但在这里,它再次打印358,但跳过360,转到2。您是否可以编辑您的帖子并使预期的输出更易于阅读?我想知道它是否打印任何内容,因为您从未在代码中定义日期……它无法打印数字360,因为您的if语句if(number+steps>365)在数字大于355时触发(如果步长为10).我已经编辑了我的输出,希望现在清楚。即使我将步长更改为2,它也不会返回10、12、14等输出,直到它达到360,然后应该打印2、4…直到8。但是这里它再次打印358,但跳过360,并移到2个级别。当我运行与您相同的代码时,这是有用的,我得到了序列,但相反在365个步骤中,我得到一个0
firstnumber=10步骤=5步骤limit=365 seq(firstnumber,limit+firstnumber,step)%%limit
如果您希望您的范围从1到包含的限制(而不是从0到小于限制的1),请使用
seq(firstnumber-1,limit+firstnumber-1步骤)%%limit+1。
我修改了我的答案,将其包括在内。很高兴为您提供帮助:)非常感谢。这正是我希望它的工作方式。谢谢,当我像你一样运行完全相同的代码时,这很有用,我得到了序列,但不是365,而是0
firstnumber=10 step=5 limit=365 seq(firstnumber,limit+firstnumber,step)%%limit
,如果你希望你的范围从1到限制(而不是从0到比限制小1)使用
seq(firstnumber-1,limit+firstnumber-1,step)%%limit+1。
我修改了我的答案,将其包括在内。很高兴帮忙:)非常感谢。这正是我想要的。