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