如何使用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}
但是对我来说似乎太不自然了。 有没有更紧凑或更简单的方法来解决问题?
答案 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