[R] Apply a function to columns of a matrix

jim holtman jholtman at gmail.com
Sat Sep 8 23:19:23 CEST 2012


Is this what you wanted?  You had two arguments to your function, but
only supplying one via the 'apply'.  Also your argument names were the
same as your variables which was confusing.

> a <-matrix(c(1:100),ncol=10)
> b <-matrix(c(2,4,6,8,10,12,14,16,18,20))
>
> apply(a,2,function(y,x) sum(diff(x)*(y[-1]+y[-length(y)]))/2, x = b )
 [1]   99  279  459  639  819  999 1179 1359 1539 1719
>



Were you assuming that you could reference the value of 'b' within the
function?  If so, you could have done this:

> a <-matrix(c(1:100),ncol=10)
> b <-matrix(c(2,4,6,8,10,12,14,16,18,20))
>
> apply(a,2,function(x) sum(diff(b)*(x[-1]+x[-length(x)]))/2 )
 [1]   99  279  459  639  819  999 1179 1359 1539 1719
>
>


On Sat, Sep 8, 2012 at 3:45 PM, Andras Farkas <motyocska at yahoo.com> wrote:
> Dear All,
>
> as a follow up to my previous e-mail (I think I am getting closer...):
>
> I am trying to apply the trapezoidal functions to a matric column by column. I have the following code:
>
> a <-matrix(c(1:100),ncol=10)
> b <-matrix(c(2,4,6,8,10,12,14,16,18,20))
>
> apply(a,2,function(b,a) sum(diff(b)*(a[-1]+a[-length(a)]))/2)
>
> for some reason i get an error message:
> Error in FUN(newX[[, i], ...): argument "a" is missing with no default.
>
> Any ideas of why that may be happening?
>
> thanks,
>
> Andras
>         [[alternative HTML version deleted]]
>
>
> ______________________________________________
> 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.
>



-- 
Jim Holtman
Data Munger Guru

What is the problem that you are trying to solve?
Tell me what you want to do, not how you want to do it.




More information about the R-help mailing list