2015-05-16 12 views
7

Angenommen, ich habe ein zweidimensionales Array und möchte auf jede seiner Spalten mehrere Funktionen anwenden. Idealerweise möchte ich die Ergebnisse in Form einer Matrix zurückgeben (mit einer Zeile pro Funktion und einer Spalte pro Eingabespalte).Sapply (von R) entspricht für Julia?

Der folgende Code generiert die Werte, die ich möchte, aber als ein Array von Arrays.

A = rand(10,10) 
[mapslices(f, A, 1) for f in [mean median iqr]] 

Ein weiteres ähnliches Beispiel ist hier [Julia: use of pmap with matrices

Gibt es eine bessere Syntax für die Ergebnisse zurück in Form eines 2-dimensionalen Array bekommen, anstelle eines Arrays von Arrays?

Was würde Ich mag etwas mit einer Funktionalität ähnlich wie sapply von R. [https://stat.ethz.ch/R-manual/R-devel/library/base/html/lapply.html]

+0

Gilt 'mapslices (f, A, 2)' 'f' für _rows_ von ** A ** anstatt für _columns_? – rickhg12hs

+1

Sie können sich die [aggregate] Funktion (http://dataframesjl.readthedocs.org/en/latest/split_apply_combine.html) in den [DataFrames] (https://github.com/) ansehen. JuliaStats/DataFrames.jl) Paket. – rickhg12hs

Antwort

7

Sie können eine anonyme Funktion wie in

mapslices(t -> [mean(t), median(t), iqr(t)], A, 1) 

aber mit Comprehensions und splatting verwenden, wie in Ihrem letzten Beispiel auch in Ordnung ist. Bei sehr großen Arrays sollten Sie die temporären Zuordnungen vermeiden, die durch transpose und splatting eingeführt wurden. In den meisten Fällen müssen Sie jedoch nicht darauf achten.

2

Nach einem wenig herum zu spielen, fand ich eine Option, aber ich bin immer noch daran interessiert zu hören, wenn es bessere Möglichkeiten gibt, es zu tun.

[[mapslices(f, A, 1)' for f in [mean median iqr]]...]