2016-07-13 11 views
0

Ok, also habe ich eine Liste ("datalist") mit 829 Elementen. Die Zahlen in jedem Element sind auf einer Skala von 1 bis 676, aber mein Code kehrt zum Anfang des 676 zurück, wenn das Element ein Vektor mit einer Länge von mehr als eins ist. Ich suche nach einer Möglichkeit, 676 von nur den Werten der Liste zu subtrahieren, die größer als 676 sind. Ich habe versucht, ohne Erfolg zu benutzen. Unten ist ein kleiner Abschnitt der Liste gefolgt von meinem Code und der Fehlermeldung. Vielen Dank!So subtrahieren Sie nur bestimmte Elemente einer Liste

[[825]] 
[1] 429 496 

[[826]] 
[1] 8 895 1181 

[[827]] 
[1] 6 

[[828]] 
[1] 901 916 1298 1299 1302 1307 

Code:

sub <- function(x){ 
for(i in datalist[x]){ 
    if(i > 676) 
    i = i-676 
} 
} 

lapply(1:829, sub) 

Der Code gibt alle der Listenelemente als NULL und gibt die folgende Fehlermeldung.

Fehlermeldung:

1-50: In if (i > 676) i = i - 676 : 
the condition has length > 1 and only the first element will be used 

Was ich suche ist die Code-Ausgabe zu haben:

[[825]] 
[1] 429 496 

[[826]] 
[1] 8 219 505 

[[827]] 
[1] 6 

[[828]] 
[1] 225 240 622 623 626 631 
+0

Nicht ganz ich glaube. –

+0

Oh ich sehe - Sie 'subtrahieren' (d. H. Entfernen) von der Liste '- Sie' subtrahieren von jedem Element der Liste ' – SymbolixAU

+0

Ich denke, Sie können immer noch die Antworten auf die andere Frage verwenden. – SymbolixAU

Antwort

1

Versuchen:

sub <- function(x) {x[x > 676] <- x[x > 676] - 676} 
lapply(datalist, sub) 

Auch wenn alle Werte größer als 676 sind weniger als 2 * 676, sub kann sein:

sub <- function(x) {x %% 676} #returns modulo 
+0

Leider sind einige Werte mehr als 2 * 676. Mit diesem Skript werden alle Werte kleiner als 676 als "Integer (0)" ausgegeben. –

+0

Das zweite "Sub" hat funktioniert! –

Verwandte Themen