In any case, one way to get apply() to return a list is to wrap the result from the subfunction inside a list, e.g.:
> x <- apply(matrix(1:6,2), 1, function(x) list((c(mean=mean(x), sd=sd(x))))) > x [[1]] [[1]][[1]] mean sd 3 2
[[2]] [[2]][[1]] mean sd 4 2
> # to remove the extra level of listing here, do: > lapply(x, "[[", 1) [[1]] mean sd 3 2
[[2]] mean sd 4 2
>
At Monday 11:37 AM 11/1/2004, Arne Henningsen wrote:
Hi,
I have a dataframe (say myData) and want to get a list (say myList) that contains a matrix for each row of the dataframe myData. These matrices are calculated based on the corresponding row of myData. Using a for()-loop to do this is very slow. Thus, I tried to use apply(). However, afaik apply() does only return a list if the matrices have different dimensions, while my matrices have all the same dimension. To get a list I could change the dimension of one matrix artificially and restore it after apply():
This a (very much) simplified example of what I did: > myData <- data.frame( a = c( 1,2,3 ), b = c( 4,5,6 ) ) > myFunction <- function( values ) { + myMatrix <- matrix( values, 2, 2 ) + if( all( values == myData[ 1, ] ) ) { + myMatrix <- cbind( myMatrix, rep( 0, 2 ) ) + } + return( myMatrix ) + } > myList <- apply( myData, 1, myFunction ) > myList[[ 1 ]] <- myList[[ 1 ]][ 1:2, 1:2 ] > myList $"1" [,1] [,2] [1,] 1 1 [2,] 4 4
$"2" [,1] [,2] [1,] 2 2 [2,] 5 5
$"3" [,1] [,2] [1,] 3 3 [2,] 6 6
This exactly does what I want and really speeds up the calculation, but I wonder if there is an easier way to make apply() return a list.
Thanks for your help, Arne
-- Arne Henningsen Department of Agricultural Economics University of Kiel Olshausenstr. 40 D-24098 Kiel (Germany) Tel: +49-431-880 4445 Fax: +49-431-880 1397 [EMAIL PROTECTED] http://www.uni-kiel.de/agrarpol/ahenningsen/
______________________________________________ [EMAIL PROTECTED] mailing list https://stat.ethz.ch/mailman/listinfo/r-help PLEASE do read the posting guide! http://www.R-project.org/posting-guide.html
______________________________________________ [EMAIL PROTECTED] mailing list https://stat.ethz.ch/mailman/listinfo/r-help PLEASE do read the posting guide! http://www.R-project.org/posting-guide.html