[R] on "do.call" function

David Winsemius dwinsemius at comcast.net
Mon Aug 8 19:08:34 CEST 2011


On Aug 8, 2011, at 11:16 AM, 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.

Why are you trying to use do.call? It operates on a sequence of lists  
which would be dataframe columns. while it appears you want to operate  
on a row-by-row basis. You probably want apply rather than do.call (as  
you were already told.).

?apply

(You will need to modify the fc() function to take row arguments by  
either their position of by named index.)

-- 
David.
>
> 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??

--

David Winsemius, MD
West Hartford, CT



More information about the R-help mailing list