# NOT RUN {
require(graphics)
y <- ys <- (-20:20)^2
y [c(1,10,21,41)] <- c(100, 30, 400, 470)
s7k <- runmed(y, 7, endrule = "keep")
s7. <- runmed(y, 7, endrule = "const")
s7m <- runmed(y, 7)
col3 <- c("midnightblue","blue","steelblue")
plot(y, main = "Running Medians -- runmed(*, k=7, endrule = X)")
lines(ys, col = "light gray")
matlines(cbind(s7k, s7.,s7m), lwd = 1.5, lty = 1, col = col3)
eRules <- c("keep","constant","median")
legend("topleft", paste("endrule", eRules, sep = " = "),
col = col3, lwd = 1.5, lty = 1, bty = "n")
stopifnot(identical(s7m, smoothEnds(s7k, 7)))
## With missing values (for R >= 3.6.1):
yN <- y; yN[c(2,40)] <- NA
rN <- sapply(eRules, function(R) runmed(yN, 7, endrule=R))
matlines(rN, type = "b", pch = 4, lwd = 3, lty=2,
col = adjustcolor(c("red", "orange4", "orange1"), 0.5))
yN[c(1, 20:21)] <- NA # additionally
rN. <- sapply(eRules, function(R) runmed(yN, 7, endrule=R))
head(rN., 4); tail(rN.) # more NA's too, still not *so* many:
stopifnot(exprs = {
!anyNA(rN[,2:3])
identical(which(is.na(rN[,"keep"])), c(2L, 40L))
identical(which(is.na(rN.), arr.ind=TRUE, useNames=FALSE),
rbind(cbind(c(1:2,37:38,40L), 1L),
cbind(37:41, 2L), cbind(37:38, 3L)))
identical(rN.[39:41, "median"], c(324, 397, 470))
})
# }
Run the code above in your browser using DataLab