R apply - 命名要使用的函数

时间:2016-07-21 15:22:38

标签: r apply anonymous-function

这两个功能之间是否存在机械/风格/“其他原因”差异?

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

1 个答案:

答案 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

无论如何,在个人的情况下,我尽量避免使用一次性物品来覆盖我的环境。