Chcemy dostać tablicę, która wygląda tak:Powtarzanie powtarzana sekwencja
1,1,1,2,2,2,3,3,3,4,4,4,1,1,1,2,2,2,3,3,3,4,4,4,1,1,1,2,2,2,3,3,3,4,4,4
Jaki jest najprostszy sposób to zrobić?
Chcemy dostać tablicę, która wygląda tak:Powtarzanie powtarzana sekwencja
1,1,1,2,2,2,3,3,3,4,4,4,1,1,1,2,2,2,3,3,3,4,4,4,1,1,1,2,2,2,3,3,3,4,4,4
Jaki jest najprostszy sposób to zrobić?
Można to zrobić za pomocą jednego rep
rozmowy. Parametry each
i times
są oceniane sekwencyjnie, przy czym najpierw wykonuje się each
.
rep(1:4, times=3, each=3)
#[1] 1 1 1 2 2 2 3 3 3 4 4 4 1 1 1 2 2 2 3 3 3 4 4 4 1 1 1 2 2 2 3 3 3 4 4 4
To powinna być akceptowana odpowiedź, według mnie – Andrie
jak poniżej:
rep(sapply(1:4, function(x) {rep(x, 3)}), 3)
REP (X, Y) zwraca wektor powtarzania razy x n. sapply stosuje daną funkcję do każdego elementu wektora 1: 4 oddzielnie, powtarzając każdy element 3 razy pod rząd.
Powinieneś rzucić okiem na odpowiedź Dietera - parametr "każdy" zrobiłby to, co robisz, o wiele ładniej niż przy użyciu połączenia z sapply. – Dason
Albo prościej (zakładając, że masz na myśli wektor, a nie tablicy)
rep(rep(1:4,each=3),3)
Oto metoda wykorzystująca manipulację tablicą przy pomocy aperm
. Chodzi o to, aby skonstruować tablicę zawierającą wartości. Zmień ich rozmieszczenie tak, aby pasowały do żądanego wyjścia, używając aperm
, a następnie "rozwiń" tablicę za pomocą c
.
c(aperm(array(1:4, dim=c(4,3,3)), c(2, 1, 3)))
[1] 1 1 1 2 2 2 3 3 3 4 4 4 1 1 1 2 2 2 3 3 3 4 4 4 1 1 1 2 2 2 3 3 3 4 4 4
pomyślał o pętli for, ale czy nie jest prostszy sposób? –