Replizieren alternierende Vektorwerte

7

Ich kann nicht herausfinden, wie man einen Vektor von 3 bis 50 erzeugt, wobei die geraden Zahlen zweimal und die ungeraden Zahlen einmal repliziert werden, so dass der Vektor

wäre %Vor%     
Cardinal 09.02.2017, 20:45
quelle

3 Antworten

10

rep() wird den Trick machen.

%Vor%

x %% 2 == 0 gibt einen logischen Vektor, der angibt, welche Elemente von x gerade sind. Da die ganzzahligen Werte von TRUE und FALSE jeweils 1 und 0 sind, gibt uns das Hinzufügen von 1 zu x %% 2 == 0 den Vektor, den wir für unser times Argument in rep() benötigen.

Wenn wir Golf spielen, können wir es auf rep(x, (!x %% 2) + 1L) verkürzen.

Beachten Sie, dass diese Methode auch dann nützlich ist, wenn unser ursprünglicher Vektor nicht sequenziell ist und die geraden Werte immer noch repliziert werden sollen.

%Vor%     
Rich Scriven 09.02.2017, 20:48
quelle
8

Wir können einen Vektor aller Werte und einen Vektor der geraden Zahlen zusammenführen:

%Vor%     
dww 09.02.2017 21:23
quelle
5

Verwenden Sie Recycling, ein bisschen manuell:

%Vor%     
zx8754 09.02.2017 21:06
quelle

Tags und Links