[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