> sl <- function(x,z) c(0,cumsum(diff(x)[1:(length(x)-z-1)])) + > rep(sum(x[1:z]),length(x)-z) > x <- rbinom(100000, 1, 0.5) > system.time(xx1 <- slide(x,12)) utilisateur système écoulé 36.86 0.45 37.32 > system.time(xx2 <- sl(x,12)) utilisateur système écoulé 0.01 0.00 0.02 > all.equal(xx1,xx2) [1] TRUE
Jacques VESLOT CEMAGREF - UR Hydrobiologie Route de Cézanne - CS 40061 13182 AIX-EN-PROVENCE Cedex 5, France Tél. + 0033 04 42 66 99 76 fax + 0033 04 42 66 99 34 email jacques.ves...@cemagref.fr >-----Message d'origine----- >De : r-help-boun...@r-project.org [mailto:r-help-boun...@r-project.org] De la >part >de Chris Oldmeadow >Envoyé : mardi 16 décembre 2008 05:20 >À : r-help@r-project.org >Objet : [R] sliding window over a large vector > >Hi all, > >I have a very large binary vector, I wish to calculate the number of >1's over sliding windows. > >this is my very slow function > >slide<-function(seq,window){ > n<-length(seq)-window > tot<-c() > tot[1]<-sum(seq[1:window]) > for (i in 2:n) { > tot[i]<- tot[i-1]-seq[i-1]+seq[i] > } > return(tot) >} > >this works well for for reasonably sized vectors. Does anybody know a >way for large vectors ( length=12 million), im trying to avoid using C. > >Thanks, >Chris > >______________________________________________ >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. ______________________________________________ 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.