Along similar lines, I wrote a toy script to apply any function you want in a windowed sense. Be warned that it's about 10000 times slower than loess().

# my  own boxcar tool, just because.
# use bfunc to specify what function to apply to the windowed
# region.
# basically must be valid function name and must accept
# single value or vector of values
# "pad" generates partial-width values at ends of x so output is
# same length as input.
# and make it optional for picky people
boxcar<-function(x, width=5, bfunc='mean', pad=TRUE){
        goodfunc<-try(bfunc<-get(bfunc),silent=TRUE)
        if (inherits (goodfunc,"try-error")) {
                stop ('"', bfunc,'"', ' is not a known function', call.=FALSE)
                }
        # paranoid, force width to be integer
        width<-floor(width)
        # fix width given definition of window() inputs
        width<-max(0,(width-1))
if (width%%2 == 1) cat('Warning: window is even length, hence asymmetric\n')
        #adjust start, end points to half-window width; keep output length right
        seqstart<- 1 -pad*((width+1)%/%2)
        seqend<- length(x)- width + pad*(width%/%2)
        boxout<-mapply(function(shiftx) {
                bfunc(window(x,max(shiftx,1), min(shiftx+width,length(x)) ) )
                } ,seq(seqstart, seqend) )
                return(invisible(boxout))
        }

______________________________________________
R-help@r-project.org mailing list
https://stat.ethz.ch/mailman/listinfo/r-help
PLEASE do read the posting guide http://www.R-project.org/posting-guide.html
and provide commented, minimal, self-contained, reproducible code.

Reply via email to