SlidingWindow <- function(FUN, data, window, step, strict=F){
# Validation testing
if(strict) {
if(!is.numeric(data)) stop("Please supply numeric data")
if(sum(is.vector(data), is.matrix(data)) == 0) {
stop("You must supply data as a vector or matrix")
}
if(is.vector(data)){
if(window > length(data)) stop("Window size is too large")
if((step + window) > length(data)) stop("Window and step size
should be small enough
that multiple windows
can be examined")
}
if(is.matrix(data)){
if(window > nrow(data)) stop("Window size is too large for number of rows")
if(window > ncol(data)) stop("Window size is too large for number of cols")
if((step + window) > nrow(data)) stop("Window and step size
should be small enough
that multiple windows
can be examined")
}
}
# code for vectors
if(is.vector(data)) {
total <- length(data)
spots <- seq(from = 1, to = (total - window + 1), by = step)
result <- vector(length = length(spots))
for(i in 1:length(spots)){
result[i] <- match.fun(FUN)(data[spots[i]:(spots[i] + window - 1)])
}
}
# code for matrices
if(is.matrix(data)){
total.x <- ncol(data)
spots.x <- seq(from = 1, to = (total.x - window + 1), by = step)
total.y <- nrow(data)
spots.y <- seq(from = 1, to = (total.y - window + 1), by = step)
result <- matrix(, length(spots.y), length(spots.x))
for(i in 1:length(spots.y)){
for(j in 1:length(spots.x)){
result[i, j] <- match.fun(FUN)(data[spots.y[i]:(spots.y[i] + window - 1),
spots.x[j]:(spots.x[j] + window - 1)])
}
}
}
# complete failure message
if(!exists("result")) stop("Hmmm unknown error... Sorry")
# return the result to the user
return(result)
}
Add the following code to your website.
For more information on customizing the embed code, read Embedding Snippets.