Czy można łączyć funkcje w R?Metoda łańcuchowa z R
dane próbki:
m <- matrix(c(1:10, 11:20), nrow = 10, ncol = 2)
Na przykład, chciałbym wymienić następujące instrukcje poniżej:
step1 <- mean(m)
step2 <- sum(step1)
res <- step2
Albo
res <- sum(mean(m))
Z czymś takim:
res <- [email protected]()@sum()
W niektórych przypadkach może to znacznie wyjaśnić mój kod.
EDIT1 To jest fałszywy przykład. Wybrałem losowo "sumę" i "średnią".
Ben dał pierwszy kawałek odpowiedź używając% @% jednak to uniemożliwia korzystanie z dodatkowych argumentów wewnątrz funkcji:
m %@% function1(arg1, arg2) %@% function2(arg1, arg2)
Jak mogę obejść to?
EDIT2 Dodawanie przykład
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")
Przykład ten wydaje się działać prawidłowo roztworem 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")
mniej ważne do mojego przypadku, ale wart wymieniając następujące statment nie roztworem Karola :
xts.ts %@% names <- 'ts name'
Co jest nie tak z 'res <- sum (mean (m))? –
Nic, ale nie ma większego sensu wzięcie "sumy" wektora długości 1 (co jest zwracane przez "średnie" na macierzy). – Henrik
Chociaż zniknie "wkrótce", nadal istnieje funkcja 'mean.data.frame', która zwraca wektor. –