2017-03-21 30 views
2

我创建包含的几个功能的R列表:基于R的功能列表

funs <- list(
+  sum = sum, 
+  mean = mean, 
+  median = median 
+ ) 

为了lapply使用,哈德利韦翰的书,我指的用途:

lapply(funs, function(f) f(x)) 

我得到了lapply函数的第一个参数是list,但function(f) f(x) 怎么来成为lapply的第二个参数,理想情况下这应该是一个函数。我的X是:

x <- 1:10 
+0

@RonakShah,它是如何得到评估是我所关心的。我知道匿名函数,因此在同一类别下标记了问题。 –

回答

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 
+0

谢谢哈罗德。 –

3

的第二个参数是lapply

function(f) f(x) 

其中的函数。这是一个函数,其参数也是一个函数,f

为了阐明所发生的事情,让我们拿出了“匿名”的匿名函数:

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

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

+0

如果x是1:10,这个函数评估什么? –

+0

运行它并找出? –

+0

我得到的输出是: '> lapply(玩意儿,函数(f)F(X)) $总和 [1] 55 $意味着 [1] 5.5 $位数 [1] 5.5 ' 我的理解。我没有得到的是第二个参数,它是一个函数如何得到评估并传递给lapply。 –