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
无论如何,就个人而言,我尽量避免使用一次性对象使我的环境超载。
这两个函数有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
无论如何,就个人而言,我尽量避免使用一次性对象使我的环境超载。