Hello, Here is one way...
m <- matrix(1:16, nrow=4) end <- c(2, 3, 1, 3) ii <- cbind(sequence(end), rep(1:length(end), end)) sums <- tapply(m[ ii ], ii[ , 2], sum) And here is another way... sums <- mapply(function(col, lastrow) sum(m[1:lastrow, col]), 1:ncol(m), end) Hope this helps, Michael On 11 January 2011 16:17, zhaoxing731 <zhaoxing...@yahoo.com.cn> wrote: > Hello > > Suppose I have a matrix mat=(1:16,2) > [,1] [,2] [,3] [,4] > [1,] 1 5 9 13 > [2,] 2 6 10 14 > [3,] 3 7 11 15 > [4,] 4 8 12 16 > I just want to use the "apply" function to the matrix partially > there is a vector end=c(2,3,1,3) > #sum the 1st 2 numbers of the 1st column > #sum the 1st 3 numbers of the 2nd column > #sum the 1st number of the 3rd column > #sum the 1st 3 numbers of the 4th column > #they are specified by vector end > a for loop > for (i in 1:4) > { > outsum=sum[1:end[i],i] > } > but when I want to do it to a large dataset, it's inefficency becomes a > problem, so need vectorization > the "apply" function will sum all of each vector, which is not my purpose > > Thank you in advance > > Yours sincerely > > > > > ZhaoXing > Department of Health Statistics > West China School of Public Health > Sichuan University > No.17 Section 3, South Renmin Road > Chengdu, Sichuan 610041 > P.R.China > > > __________________________________________________ > 赶快注册雅虎超大容量免费邮箱? > > > ______________________________________________ > 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.