Ich bin auf einfache Weise der Vereinfachung von Code suchen.Nicht-Standard-Bewertungssyntax mit der Verwendung von Magnetrtr Reverse-Pipe schreiben
Beispiel
Die sqrt
Funktion leicht unterhalb auf die Teilmenge der Spalten angewandt werden könnte.
require(magrittr)
mtcars[,-which(colnames(mtcars) %in%
c("mpg", "cyl", "drat", "wt", "carb",
"hp", "qsec", "vs", "am", "gear"))] %<>%
sqrt
Problem
Ich habe Interesse an der Anwendung andere Transformationen auf die Teilmenge ohne die Notwendigkeit, wieder die ganze subsetting Sequenz eingeben.
Zum Beispiel der Code:
mtcars[,-which(colnames(mtcars) %in%
c("mpg", "cyl", "drat", "wt", "carb",
"hp", "qsec", "vs", "am", "gear"))] %<>%
.data * 1000
kehrt Fehler:
Error in function_list[[k]](value) : could not find function ".data"
Gleiche mit Syntax .
. Meine Frage ist: Syntax-weise, wie kann ich den gleichen Effekt wie in der sqrt
Funktion erhalten, aber längere Funktion auf die übergebene Teilmenge anwenden?
ersetzen '.data * 1000' durch' \ '* \' (1000) '? um es als eine Funktion und nicht als Operator zu bezeichnen? – Tensibai
@Tensibai Es ist Interesse Ansatz, aber wie kann ich eine Reihe von Operationen effizient übergeben? Multiplikation ist nur ein Beispiel für eine mögliche Nutzung. In der Praxis möchte ich ein paar Dinge für diese Daten. – Konrad
Eine benutzerdefinierte Funktion schreiben, die eine kompatible Ausgabe liefert? (Vektor für Vektor, usw.) oder einfach nur eine anonyme Funktion, wie @Uwe in seiner Antwort gezeigt hat. Ich stimme für die 1, damit Sie die Funktion auch alleine testen können. Ie: '% <>% {. * 10 - 1000} 'zum Beispiel – Tensibai