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()
場合によっては、それで私のコードがかなり明確になります。
EDIT1これはダミーの例です。「sum」と「mean」をランダムに選びました。
ベンは%@%を使用して最初の答えを出しましたが、関数内で余分な引数を使用することはできません。
m %@% function1(arg1, arg2) %@% function2(arg1, arg2)
どうすればそれを回避できますか?
EDIT2例を追加する
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")
この例は、Charlesソリューションで正常に機能するようです。
`%@%` <- 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'