[R] on "do.call" function

peter dalgaard pdalgd at gmail.com
Mon Aug 8 19:04:58 CEST 2011


On Aug 8, 2011, at 17:16 , Kathie wrote:

> Dear all,
> 
> Even though one of R users answered my question, I cannot understand, so I
> re-ask this question.
> 
> I am trying to use "do.call", but I don't think I totally understand this
> function.

It has nothing to do with do.call, the problem is that your fc() function isn't vectorized.  

Specifically:

> dpois(0, exp(rowSums(t(X[1,])*B[,1]))) 
[1] 0.1891356
> dpois(0, exp(rowSums(t(X[2,])*B[,1]))) 
[1] 0.1859965
> dpois(0, exp(rowSums(t(X[c(1,2),])*B[,c(1,1)]))) 
                    x 
0.06598804 0.35684473 

which in turn boils down to

> t(X[c(1,2),])*B[,c(1,1)]
  [,1] [,2]
  0.50 0.50
x 0.01 0.02
> t(X[1,])*B[,1]
            x
[1,] 0.5 0.01
> t(X[2,])*B[,1]
            x
[1,] 0.5 0.02

(You may be needing a drop=FALSE or two, but how am I to tell...) 

> 
> 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??
> 
> 
> Regards,
> 
> Kathryn Lord 
> 
> --
> View this message in context: http://r.789695.n4.nabble.com/on-do-call-function-tp3727262p3727262.html
> Sent from the R help mailing list archive at Nabble.com.
> 
> ______________________________________________
> 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.

-- 
Peter Dalgaard, Professor,
Center for Statistics, Copenhagen Business School
Solbjerg Plads 3, 2000 Frederiksberg, Denmark
Phone: (+45)38153501
Email: pd.mes at cbs.dk  Priv: PDalgd at gmail.com
"Døden skal tape!" --- Nordahl Grieg



More information about the R-help mailing list