2016-07-21 7 views
2

Есть ли механическая/стилистическая/«другая причина» разница между этими двумя функциями?R apply - назначение функции, которая будет использоваться

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

В этом примере они обеспечивают одинаковый конечный результат.

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 

Сначала нанесите функции:

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

Второй применить функцию:

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

ответ

2

Примечание порядок функции обменена от вопроса.

В первом случае функция является анонимной и существует только временно в вызове. В этом втором случае функция назначается и, таким образом, отображается в вашей глобальной среде, и вы можете ее повторно использовать в другом месте.

Когда вы просите перечислить объекты в глобальной среде с ls() вы получите:

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 

здесь ссылка на страницу Hadley Уикхем для функционального программирования, главы на анонимные функции: link

Во всяком случае , лично я стараюсь не перегружать мою среду одноразовыми объектами.

 Смежные вопросы

  • Нет связанных вопросов^_^