2016-04-12 6 views
0

Beim Lesen des Funktions-Operator-Kapitels in Advanced R von H. Wickham stieß ich auf die compose Funktion. Infixoperator, "o" wird verwendet, Funktion Komposition zu erstellen:Anonyme Funktion in Funktionszusammensetzung

library(pryr) 
"%o%" <- compose 

Nun ist die Frage, warum die folgende Funktion arbeitet

mul <- sum %o% median %o% mean %o% length %o% function(x) x^2

mul(1:10)

10

Aber das tut nicht

mul <- sum %o% median %o% mean %o% function(x) x^2 %o% length

mul(1:10)

Error in FUN(X[[i]], ...) : 'list(...)[[1L]]' is not a function, character or symbol

wo der einzige Unterschied die Position der anonymen Funktion ist.

Antwort

0

Ich denke, die anonyme Funktion muss in geschweifte Klammern gesetzt werden, sonst length ist als Teil der Funktion zusammengesetzt, und dies (legitim) gibt einen Fehler zurück. Sie können versuchen:

mul2 <- sum %o% median %o% mean %o% {function(x) x^2} %o% length 
> mul2(1:10) 
[1] 100 

Ist das, was Sie wollen?