2017-03-21 31 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。 –