R apply - 命名要使用的函数

R apply - naming the function to be used

这两个函数有mechanical/stylistic/"other reason"区别吗?

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

请注意函数顺序与问题互换。

在第一种情况下,函数是匿名的,只是暂时存在于调用中。在第二种情况下,该函数已分配并因此出现在您的全局环境中,您可以在其他地方重用它。

当您要求使用 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

这里是 link Hadley Wickham 的函数式编程页面,关于匿名函数的章节:link

无论如何,就个人而言,我尽量避免使用一次性对象使我的环境超载。