Цепочка методов с R

Можно ли связать функции в R?

Пример данных:

m <- matrix(c(1:10, 11:20), nrow = 10, ncol = 2)

Например, я хотел бы заменить следующие операторы ниже:

step1 <- mean(m)
step2 <- sum(step1)
res <- step2

Или,

res <- sum(mean(m))

Что-то вроде этого:

res <- m@mean()@sum()

В некоторых случаях это значительно прояснит мой код.

РЕДАКТИРОВАТЬ1 Это фиктивный пример. Я случайно выбрал «сумму» и «среднее».

Бен дал первую часть ответа, используя %@%, однако это предотвращает использование дополнительных аргументов внутри функций:

m %@% function1(arg1, arg2) %@% function2(arg1, arg2)

Как я могу обойти это?

РЕДАКТИРОВАТЬ2 Добавление примера

require(xts)
require(PerformanceAnalytics)
xts.ts <- xts(rnorm(231),as.Date(13514:13744,origin="1970-01-01"))
plot(na.omit(lag( rollapply(xts.ts, width=rolling.per-1, FUN= function(x){sqrt(var(x))*sqrt(252)}), k=1)), main = "Dummy Example")

Этот пример отлично работает с решением Чарльза :

`%@%` <- function(x, f) eval.parent(as.call(append(as.list(substitute(f)), list(x), 1)))
xts.ts %@% rollapply( width = rolling.per-1, FUN= function(x) x%@%var%@%sqrt * sqrt(252) ) %@% lag( k=1) %@% na.omit %@% plot(main = "Dummy Example")

. Менее важно для моего случая, но стоит упомянуть, что следующее утверждение не работает с решением Чарльза:

 xts.ts %@% names <- 'ts name' 
10
задан Sam 5 July 2012 в 09:29
поделиться