Как я могу использовать для, пока, повторять функции с изменением времени повторения - PullRequest
0 голосов
/ 30 мая 2019

Как распечатать следующий код с помощью функций For, While и Repeat в R?

[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) </p>

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

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

}

в то время как func

t <-c (5,0,3,0,1,0,3,0,5) </p>

i <-9 </p>

while (i> = 1)

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

i <-i-2} </p>

повтор

i <-9 <br>повтор {если (i <1) <br>break print (rep (i, t [i]))
i <- i-2} </p>

но мне это кажется неестественным.Есть ли более компактный или простой способ решения проблемы?

Ответы [ 2 ]

0 голосов
/ 30 мая 2019

Мы можем передать вектор ввода для репликации в 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
0 голосов
/ 30 мая 2019

Мы можем использовать 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
...