[R] Chopping a vector up into smaller vectors
Anyone got a neat way to chop a vector up into smaller subvectors? This is what I have now, which seems inelegant: chop - function(v, counts) { stopifnot(sum(counts)==length(v)) end - cumsum(counts) beg - c(1, 1+end[-length(end)]) begend - cbind(beg, end) apply(begend, 1, function(x) v[x[1]:x[2]]) } chop(9:1, c(3,2,4)) [[1]] [1] 9 8 7 [[2]] [1] 6 5 [[3]] [1] 4 3 2 1 __ 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.
Re: [R] Chopping a vector up into smaller vectors
Hi Stephen, how about this: chop-function(x,counts){ stopifnot(sum(counts)==length(x)) split(9:1,unlist(mapply(rep,seq_along(counts),counts))) } chop(9:1,c(3,2,4)) cheers Am 02.08.2012 12:29, schrieb Stephen Eglen: Anyone got a neat way to chop a vector up into smaller subvectors? This is what I have now, which seems inelegant: chop - function(v, counts) { stopifnot(sum(counts)==length(v)) end - cumsum(counts) beg - c(1, 1+end[-length(end)]) begend - cbind(beg, end) apply(begend, 1, function(x) v[x[1]:x[2]]) } chop(9:1, c(3,2,4)) [[1]] [1] 9 8 7 [[2]] [1] 6 5 [[3]] [1] 4 3 2 1 __ 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. -- Eik Vettorazzi Department of Medical Biometry and Epidemiology University Medical Center Hamburg-Eppendorf Martinistr. 52 20246 Hamburg T ++49/40/7410-58243 F ++49/40/7410-57790 -- Pflichtangaben gemäß Gesetz über elektronische Handelsregister und Genossenschaftsregister sowie das Unternehmensregister (EHUG): Universitätsklinikum Hamburg-Eppendorf; Körperschaft des öffentlichen Rechts; Gerichtsstand: Hamburg Vorstandsmitglieder: Prof. Dr. Guido Sauter (Vertreter des Vorsitzenden), Dr. Alexander Kirstein, Joachim Prölß, Prof. Dr. Dr. Uwe Koch-Gromus __ 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.
Re: [R] Chopping a vector up into smaller vectors
Hi one of possible options f- function(x, parts) split(x,rep(1:length(parts),parts)) f(9:1, c(3,2,4)) $`1` [1] 9 8 7 $`2` [1] 6 5 $`3` [1] 4 3 2 1 You can also check if your parts vector agrees with x vector, if you want. Regards Petr Anyone got a neat way to chop a vector up into smaller subvectors? This is what I have now, which seems inelegant: chop - function(v, counts) { stopifnot(sum(counts)==length(v)) end - cumsum(counts) beg - c(1, 1+end[-length(end)]) begend - cbind(beg, end) apply(begend, 1, function(x) v[x[1]:x[2]]) } chop(9:1, c(3,2,4)) [[1]] [1] 9 8 7 [[2]] [1] 6 5 [[3]] [1] 4 3 2 1 __ 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.