如何使用不断重复的时间来使用For,While,Repeat函数

时间:2019-05-30 13:11:47

标签: r for-loop while-loop repeat

如何使用R中的For,While和Repeat函数打印以下代码?

  

[1] 9 9 9 9 9

     

[1] 7 7 7

     

[1] 5

     

[1] 3 3 3

     

[1] 1 1 1 1 1

经过2个小时的试用,我发现以下代码可以打印以上结果

  

x <-c(5,0,3,0,1,0,3,0,5,0)

     

for(i in 10:1){if(!i %% 2){next}

     

print(rep(i,x [i]))

     

}

同时使用功能

  

t <-c(5,0,3,0,1,0,3,0,5)

     

i <-9

     

while(i> = 1)

     

{print(rep(i,t [i]))

     

i <-i-2}

重复

  

i <-9
  重复{if(i <1)
  打破    打印(rep(i,t [i]))
  i <-i-2}

但是对我来说似乎太不自然了。 有没有更紧凑或更简单的方法来解决问题?

2 个答案:

答案 0 :(得分:0)

我们可以将rep作为x参数直接使用times

rep(9:0, x)
#[1] 9 9 9 9 9 7 7 7 5 3 3 3 1 1 1 1 1

如果您希望它们作为列表,您可以

mapply(rep, (9:0)[x > 0], x[x > 0])

#[[1]]
#[1] 9 9 9 9 9

#[[2]]
#[1] 7 7 7

#[[3]]
#[1] 5

#[[4]]
#[1] 3 3 3

#[[5]]
#[1] 1 1 1 1 1

答案 1 :(得分:0)

我们可以传递输入向量以复制到rep

x1 <- rep(c(9, 7, 5, 3, 1), c(5, 3 ,1, 3, 5))
#[1] 9 9 9 9 9 7 7 7 5 3 3 3 1 1 1 1 1

,然后根据复制内容split

split(x1, factor(x1, levels = unique(x1)))
#$`9`
#[1] 9 9 9 9 9

#$`7`
#[1] 7 7 7

#$`5`
#[1] 5

#$`3`
#[1] 3 3 3

#$`1`
#[1] 1 1 1 1 1