使用 R 函数作为列表
Using R functions as a list
我正在创建一个包含几个函数的 R 列表:
funs <- list(
+ sum = sum,
+ mean = mean,
+ median = median
+ )
为了使用 lapply,我所指的 Hadley Wickham 的书使用:
lapply(funs, function(f) f(x))
我确实得到 lapply 函数的第一个参数是列表,但是 function(f) f(x)
为什么呢?
作为 lapply 的第二个参数,理想情况下应该是一个函数。我的 x 是:
x <- 1:10
lapply
的第二个参数是
function(f) f(x)
其中是一个函数。这是一个函数,其参数也是一个函数,f
。
为了阐明发生了什么,让我们从匿名函数中取出 "anonymous":
getFunc <- function(f) f(x)
lapply(funs, getFunc)
这与
完全一样
lapply(funs, function(f) f(x))
无需单独定义 getFunc
。
更进一步,我们取出x
:
getFunc <- function(f, xx) f(xx)
lapply(funs, getFunc, xx=x)
这与
相同
lapply(funs, function(f) f(x))
但明确传递用于计算总和、平均值和中位数的数字,而不是自动从全局环境中获取它们。
当您将匿名函数分配给一个名称时,也许它会变得更清楚 g
g <- function(f) {
f(x)
}
g
有一个函数作为参数,并将使用从词法范围获得的参数 x
调用该函数。所以 x <- 1:10
你得到
g(sum) # = sum(x) = sum(1:10)
[1] 55
同样
lapply(funs, g) # = list(g(sum), g(means), g(median)
# = list(sum(x), means(x), median(x)
# = list(sum(1:10), means(1:10), median(1:10)
$sum
[1] 55
$mean
[1] 5.5
$median
[1] 5.5
我正在创建一个包含几个函数的 R 列表:
funs <- list(
+ sum = sum,
+ mean = mean,
+ median = median
+ )
为了使用 lapply,我所指的 Hadley Wickham 的书使用:
lapply(funs, function(f) f(x))
我确实得到 lapply 函数的第一个参数是列表,但是 function(f) f(x)
为什么呢?
作为 lapply 的第二个参数,理想情况下应该是一个函数。我的 x 是:
x <- 1:10
lapply
的第二个参数是
function(f) f(x)
其中是一个函数。这是一个函数,其参数也是一个函数,f
。
为了阐明发生了什么,让我们从匿名函数中取出 "anonymous":
getFunc <- function(f) f(x)
lapply(funs, getFunc)
这与
完全一样lapply(funs, function(f) f(x))
无需单独定义 getFunc
。
更进一步,我们取出x
:
getFunc <- function(f, xx) f(xx)
lapply(funs, getFunc, xx=x)
这与
相同lapply(funs, function(f) f(x))
但明确传递用于计算总和、平均值和中位数的数字,而不是自动从全局环境中获取它们。
当您将匿名函数分配给一个名称时,也许它会变得更清楚 g
g <- function(f) {
f(x)
}
g
有一个函数作为参数,并将使用从词法范围获得的参数 x
调用该函数。所以 x <- 1:10
你得到
g(sum) # = sum(x) = sum(1:10)
[1] 55
同样
lapply(funs, g) # = list(g(sum), g(means), g(median)
# = list(sum(x), means(x), median(x)
# = list(sum(1:10), means(1:10), median(1:10)
$sum
[1] 55
$mean
[1] 5.5
$median
[1] 5.5