2016-12-05 5 views
0

Ich hoffe, jemand kann mir helfen zu verstehen, warum die mapply Funktion verhält sich anders, wenn Sie die sum Funktion aufrufen und wenn Sie die mean Funktion aufrufen.Warum verhält sich mapply() abhängig von der aufgerufenen Funktion?

Meine Frage besser ist wahrscheinlich durch Betrachten dieses MWE (teilweise entlehnt https://nsaunders.wordpress.com/2010/08/20/a-brief-introduction-to-apply-in-r/) erklärt

l1 <- list(a = c(1:10), b = c(11:20)) 
l2 <- list(c = c(21:30), d = c(31:40)) 

mapply(sum, l1$a, l1$b, l2$c, l2$d) 

[1] 64 68 72 76 80 84 88 92 96 100 

Der obige Code 10 Werte zurückgibt, die Summe der entsprechenden Elemente in jeweils a, b, c-Objekt und d.

Das folgende Beispiel nicht funktioniert auf die gleiche Weise:

mapply(mean, l1$a, l1$b, l2$c, l2$d) 

[1] 1 2 3 4 5 6 7 8 9 10 

Im letzteren Beispiel es wie b, c und d scheint ignoriert werden und es ist nur der Mittelwert von jedem Element einer Berechnung.

Wenn jemand mir helfen könnte, dies zu verstehen, wäre das großartig.

Vielen Dank!

+1

Dies hat wenig mit 'Mapply' zu tun. Siehe "? Sum" und "? Mean": Sie haben einen anderen Mechanismus im Umgang mit ihren Argumenten. Was denken Sie, dass 'sum (1,2,3)' zurückkehren wird? Und was ist mit 'mean (1,2,3)'? – nicola

+0

Danke Nicola, der Penny ist jetzt endlich gefallen. –

Antwort

3

mapply funktioniert wie erwartet. Sie fasst oder bedeutet elementweise aus Listen von Elementen. Zum Beispiel:

l1$a[1] + l1$b[1] + l2$c[1] + l2$d[1] 

[1] 64 

mean(l1$a[1], l1$b[1], l2$c[1], l2$d[1]) 

[1] 1 

Beachten Sie, dass mean nur das erste Argument verwendet, weil es akzeptiert nur x (siehe ?mean).

> mean(l1$a[1]) 
[1] 1 
> mean(l1$a[1], l1$b[1]) 
[1] 1 

Sie können rapply verwenden.

l <- list(l1, l2) 
rapply(l, mean) 

    a b c d 
5.5 15.5 25.5 35.5 
+0

Vielen Dank für Ihre Antwort. Also habe ich recht, wenn ich sage, dass der Grund 'mapply' nicht so funktioniert, wie ich es erwartet habe, weil die' mean' Funktion nur ein Argument der Zahl (s) erlaubt, während die 'sum' oder' range' Funktionen mehrere einzelne Zahlen annehmen Argumente? –

+1

@Frost_Maggot genau. Definitionen sind 'mean (x, ...)' wobei '...' Argumente sind, die von und zu anderen Methoden übergeben werden, während 'sum (..., na.rm = FALSE)' wo '...' Vektoren sind. –

+0

Vielen Dank für Ihre Hilfe :) –

Verwandte Themen