2016-07-21 15 views
2

Gibt es einen mechanischen/stilistischen/"anderen Grund" Unterschied zwischen diesen beiden Funktionen?R apply - Benennung der zu verwendenden Funktion

apply(data, 1, fName <- function(x){...}) 
apply(data, 1, function(x){...}) 

In diesem Beispiel liefern sie die gleiche Endausgabe.

dataMod <- c(3, 8, 4, 1, 7, 5, 2, 5) 
dataMod <- matrix(dataMod, nrow = 2) 
dataMod 
#  [,1] [,2] [,3] [,4] 
# [1,] 3 4 7 2 
# [2,] 8 1 5 5 

Erste Anwendung Funktion:

apply(dataMod, 1, arbitraryName <- function(x){which(x > 3)}) 
# [[1]] 
# [1] 2 3 
# 
# [[2]] 
# [1] 1 3 4 

Zweite Funktion anwenden:

apply(dataMod, 1, function(x){which(x > 3)}) 
# [[1]] 
# [1] 2 3 
# 
# [[2]] 
# [1] 1 3 4 

Antwort

2

Beachten Sie die Funktion, um von der Frage ausgelagert wird.

Im ersten Fall ist die Funktion anonym und existiert nur temporär im Aufruf. In diesem zweiten Fall wird die Funktion zugewiesen und erscheint somit in Ihrer globalen Umgebung, und Sie können sie woanders wiederverwenden.

Wenn Sie die Objekte in der globalen Umgebung zur Liste fragen mit ls() Sie erhalten:

apply(dataMod, 1, function(x){which(x > 3)}) 
ls() 
#### [1] dataMod" 
apply(dataMod, 1, arbitraryName <- function(x){which(x > 3)}) 
ls() 
#### [1] "arbitraryName" "dataMod" 
arbitraryName(1:5) 
#### [1] 4 5 

hier ist ein Link zu Hadley Wickham-Seite für die funktionale Programmierung, Kapitel über anonyme Funktionen: link

Wie dem auch sei Persönlich versuche ich zu vermeiden, meine Umgebung mit Einwegobjekten zu überlasten.

Verwandte Themen