2013-05-17 4 views
5

ich pmax verwenden möchten pmax die reihenweise maximium einer Matrix A zu berechnen:Wie einen Funktionsaufruf konstruieren aus den Spalten einer Matrix

A = matrix(sample(1:20),10,2) 
pmax(A[,1],A[,2]) 

das funktioniert gut. Aber das Problem ist, dass ich die Größe von A nicht kenne, so dass der Aufruf an pmax in der Lage sein sollte, die Matrix nach Spalten aufzuteilen und jede Spalte als ein Argument bereitzustellen. wie geht das? Zum Beispiel habe ich in der nächsten Instanz kann

A = matrix(sample(1:20),5,4) 

Aber ich will nicht mit der Hand jedes Mal

pmax(A[,1],A[,2],A[,3],A[,4]) 

in der Tat neu zu schreiben habe, ich kann nicht, weil die Größe der A ist vor dem Start des Programms unbekannt.

Antwort

7

Sie do.call verwenden können:

do.call(pmax, as.data.frame(A)) 
+0

ausgezeichnet. Vielen Dank! –

+0

@FlorianOswald Es sollte beachtet werden, dass dies schneller ist, wenn Sie Zeilen >> Spalten haben, und langsamer, wenn Sie Spalten >> Zeilen haben, als die Anwendung "anwenden", die mit Matrizen arbeiten soll. –

+0

@ SimonO101 ja, ich habe bemerkt, dass danke! –

2

Verwenden Sie einfach apply mit max statt ...

apply(A , 1 , max) 
# [1] 6 11 20 18 17 

pmax(A[,1],A[,2],A[,3],A[,4]) 
# [1] 6 11 20 18 17 
+0

Ich möchte wegen Leistungsgründen zu vermeiden gilt. Ich mache das auf einer sehr großen Matrix. Ich habe eine RcppArmadillo-Funktion geschrieben, die "apply" ersetzt und 18-mal schneller ist. Jetzt wollte man gegen 'pmax' benchmarken. Ich weiß, dass dort der C-Code 3-mal schneller ist, aber "pmax" kann 'na.rm' machen, was ich separat in C machen muss. Da komme ich her. –

+0

Schneller als der C-Code? Nun, ich habe es ausprobiert: es ist nicht. (Es ist viel langsamer). –

Verwandte Themen