[R] how to use "apply" function partial to each vector of a matrix

Michael Bedward michael.bedward at gmail.com
Tue Jan 11 08:42:31 CET 2011


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 <zhaoxing731 at 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 at 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.
>
>



More information about the R-help mailing list