2016-11-30 2 views
2

gelten die folgenden Datenrahmen ('Daten') Gegeben:eine Funktion über nummerierte Variablen in r

data <- data.frame(a1 = sample(10), b1 = rep(0,10), c1 = sample(10), 
       a2 = rep(0,10), b2 = sample(10), c2 = sample(10), 
       a3 = sample(10), b3 = sample(10), c3 = sample(10)) 

und eine Funktion I Berechnungen abhängig von 3 Bedingungen machen erstellt:

calcs <- function(a, b, c){ 
if ((max(a) > 0) & (max(b)>0)){ 
maxa <- max(a) 
maxb <- max(b) 
maxc <- max(c) 
calc = 75*c/maxc + 12.5*a/maxa + 12.5*b/maxb 
} 
else if ((max(a) > 0) & (max(b)==0)){ 
maxa <- max(a) 
maxc <- max(c) 
calc = 75*c/maxc + 25*a/maxa 
} 

else { 
maxc <- max(c) 
maxb <- max(b) 
calc = 75*c/maxc + 25*b/maxb 
} 
} 

würde ich Ich mag es, diese Funktion auf den Datenrahmen anzuwenden und die nummerierten Variablen (von 1 bis 3) zu durchlaufen, anstatt den folgenden Code zu verwenden:

Ich habe anderswo gesucht, offensichtlich ein einfaches Problem, aber mit der Vielzahl von 'Tools' Dokumentation auf Listen, lapply etc Ich bin mir nicht sicher, die beste Vorgehensweise.

Antwort

1

Wir können Map mit Eingaben von 'a', 'b' und 'c' Teilmenge von Spalten als Eingabe verwenden.

data[paste0("calc", 1:3)] <- Map(calcs, 
      data[paste0("a", 1:3)], data[paste0("b", 1:3)], data[paste0("c", 1:3)]) 
+0

Vielen Dank @akrun. Hervorragende Einführung in eine Basisfunktion, in der ich meine 'Benutzer erstellte Funktion' über den Datenrahmen verwenden kann. Alte Schule. – mkrasmus

+0

@mkrasmus Danke für die Notiz. Sie können auch [hier] (http://stackoverflow.com/help/someone-answers) überprüfen – akrun