这两个功能之间是否存在机械/风格/“其他原因”差异?
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
答案 0 :(得分: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 Wickham的函数式编程页面,有关匿名函数的章节:link
无论如何,在个人的情况下,我尽量避免使用一次性物品来覆盖我的环境。