make apply() return a list
How about this... x = matrix(1:27, ncol=9, byrow=T) nr= nrow(x) lapply(1:nr, function(i) matrix(x[i,], nrow=3, byrow=T)) Mahbub. On Mon, 1 Nov 2004 19:37:08 +0100, Arne Henningsen
<ahenningsen at email.uni-kiel.de> 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
ahenningsen at agric-econ.uni-kiel.de
http://www.uni-kiel.de/agrarpol/ahenningsen/
______________________________________________ R-help at stat.math.ethz.ch mailing list https://stat.ethz.ch/mailman/listinfo/r-help PLEASE do read the posting guide! http://www.R-project.org/posting-guide.html
A.H.M. Mahbub-ul Latif PhD Student Department of Medical Statistics University of Goettingen Germany