使用R函数作为列表

时间:2017-03-21 12:06:54

标签: r anonymous-function

我正在创建一个包含少量函数的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

2 个答案:

答案 0 :(得分:3)

lapply的第二个参数是

function(f) f(x)

一个函数。它是一个函数,其参数也是函数f

为了阐明正在发生的事情,让我们取出匿名的&#34;来自匿名函数:

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))

但明确传递计算总和,平均值和中位数的数字,而不是自动从全球环境中获取它们。

答案 1 :(得分:3)

将匿名函数分配给名称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