2017-08-28 3 views
2

Nehmen wir an, ich habe eine einfache ListeLooping/Drucken über eine Liste in R

v <- list(vec1=c(1,2,3), vec2=c(3,4,5, 6)) 

I Schleife über dieser Liste möchten und eine Funktion auf seinem Element durchführen, so dass als Ausgangs ich beide bekommen: Name dieses bestimmten Elements und Ausgabe der Funktion. Zum Beispiel:

for (i in v) 
{print(sd(i)) 
} 

In diesem Fall ist die Ausgabe:

[1] 1 
[1] 1.290994 

Aber ich möchte so etwas sehen:

$vec1 
[1] 1 
$vec2 
[1] 1.290994 

Damit ich vor Ort kann leicht an denen Element bezieht sich jede Ausgabe, wenn ich viele Elemente in meiner Liste habe. Ich weiß das es mit der Funktion names() zu tun ist, aber ich kann es nicht funktionieren lassen.

+8

'lapply (v, sd)' –

+0

Danke, das funktioniert in der Tat gut! Gibt es jedoch eine Möglichkeit, dies mit einer Art einer Schleife zu tun oder lapply() zu modifizieren, da ich in der Tat kompliziertere Beispiele habe? Zum Beispiel eine Liste von Datenframes, auf denen ich eine Korrelationsmatrix bestimmter Spalten ausführen möchte? – Yaahtzeck

Antwort

1

Mit der Funktion names() und zum Ausgeben einer Liste:

result<-list() 
for (i in 1:length(v)) 
{result[[i]]=sd(v[[i]]) 
} 
names(result)<-names(v) 

Der Nachteil dieser Methode ist, dass es die falschen Namen zuweisen, wenn die sich ergebende Liste kleiner oder größer als die ursprüngliche Liste ist (zum Beispiel, wenn Sie fügen eine next Anweisung in die Schleife ein oder überspringen auf andere Weise ein Element).

Wenn möglich, ist es viel einfacher, dem Kommentar von d.b zu folgen.