2017-04-26 2 views
0

Ich stoße immer auf das Problem, die Argumente der Funktion in eine apply Funktion zu verwenden. Ich habe umsah, aber ich konnte keine passende Antwort finden ...Wie können Funktionsargumente in die Anwendungsfamilie aufgenommen werden?

Zum Beispiel

Ich habe eine einfache Matrix wie

dput (tab) 

> structure(c(108.13, 108.13, 107.7, 107.66, 107.65, NA, NA, 115.56, 
115.5, 115.45, NA, NA, NA, 122.72, 122.66, 124.81, 124.82, 124.87, 
124.91, 124.94, NA, NA, NA, NA, 130.18), .Dim = c(5L, 5L), .Dimnames = list(
    NULL, NULL)) 

Und ich mag das Minimum jeden Spalt erhalten .

ich tun würde, so etwas wie:

apply (test, 2, min) 
> 107.65  NA  NA 124.81  NA 

Aber jetzt lassen Sie uns sagen, dass ich die NAs überspringen wollen.

Für die erste Spalte, würde ich

min (test[,1], min(na.rm = TRUE)) 
> 107.65 

tun, aber ich kann

apply (test, 2, min(na.rm = TRUE)) 

Also nicht

verwenden, wie ich Argumente an eine Funktion innerhalb apply passieren soll ich?

+5

'anwenden (test, 2, min, na.rm = T)' Siehe dieses http: // stackoverflo w.com/questions/14427253/passing-several-arguments-to-fun-of-lapper-and-others-apply – ahly

Antwort

-2

Wir können vektorisiert colMins verwenden von matrixStats

library(matrixStats) 
colMins(tab, na.rm = TRUE) 

Wenn wir nicht sicher sind, wie die Argumente zu verwenden, können anonyme Funktionsaufruf

apply(test, 2, function(x) min(x, na.rm = TRUE)) 

oder anderweitig verwendet werden, wie @ahly vorgeschlagen

Verwandte Themen