[R] problem in do.call function
Duncan Murdoch
murdoch.duncan at gmail.com
Mon Aug 8 14:21:45 CEST 2011
On 08/08/2011 4:34 AM, Kathie wrote:
> Dear all,
>
> I am trying to use "do.call", but I don't think I totally understand this
> function.
>
> Here is an simple example.
>
> --------------------------------------------
>
> > B<- matrix(c(.5,.1,.2,.3),2,2)
> > B
> [,1] [,2]
> [1,] 0.5 0.2
> [2,] 0.1 0.3
> > x<- c(.1,.2)
> > X<- cbind(1,x)
> > X
> x
> [1,] 1 0.1
> [2,] 1 0.2
> >
> > lt<- expand.grid(i=seq(1,2), y0=seq(0,2))
> > lt
> i y0
> 1 1 0
> 2 2 0
> 3 1 1
> 4 2 1
> 5 1 2
> 6 2 2
> >
> > fc<- function(y0,i) dpois(y0, exp(rowSums(t(X[i,])*B[,1])))
> >
> > do.call(fc,lt)
> [1] 1.892179e-09 3.348160e-01 3.800543e-08 3.663470e-01 3.816797e-07
> 2.004237e-01
>
> --------------------------------------------
>
> Unfortunately, what I want to get is
>
> dpois(0, exp(rowSums(t(X[1,])*B[,1]))) = 0.1891356
> dpois(0, exp(rowSums(t(X[2,])*B[,1]))) = 0.1859965
> dpois(1, exp(rowSums(t(X[1,])*B[,1]))) = 0.3149658
> dpois(1, exp(rowSums(t(X[2,])*B[,1]))) = 0.3128512
> dpois(2, exp(rowSums(t(X[1,])*B[,1]))) = 0.2622549
> dpois(2, exp(rowSums(t(X[2,])*B[,1]))) = 0.2631122
>
> --------------------------------------------
>
> Would you plz tell me why these two results are different?? and how do I get
> what I want to using "do.call" function??
Your function expects arguments in the order y0, i, but you are passing
them in the order i, y0. Change the header of your function or the
order of the columns in lt.
Duncan Murdoch
More information about the R-help
mailing list