[R] Filling Lists or Arrays of variable dimensions

Jessica Streicher j.streicher at micromata.de
Thu Dec 20 17:43:14 CET 2012


Aggregate is highly confusing (and i would have appreciated if you used my example instead, i don't get it to do anything sensible on my stuff).

And this seems not what i asked for anyway. This may be a named list but not named and structured as i want it at all.

happy Christmas too

On 20.12.2012, at 15:48, Chris Campbell wrote:

> Dear Jessica
> 
> Aggregate is a function that allows you to perform loops across multiple variables.
> 
> tempData <- data.frame(height = rnorm(20, 100, 10),  
>    width = rnorm(20, 50, 5),  
>    par1 = rnorm(20))  
> 
> tempData$htfac <- cut(tempData$height, c(0, 100, 200))   
> tempData$wdfac <- cut(tempData$width, c(0, 50, 100))   
> 
> doSomething <- function(x) { mean(x) }  
> 
> out <- aggregate(tempData["par1"], tempData[c("htfac", "wdfac")], doSomething)  
> 
> # out is a data frame; this is a named list.   
> # use as.list to remove the data.frame class   
> 
>> as.list(out)  
> 
> $htfac   
> [1] (0,100]   (100,200] (0,100]   (100,200]    
> Levels: (0,100] (100,200]   
> 
> $wdfac   
> [1] (0,50]   (0,50]   (50,100] (50,100]   
> Levels: (0,50] (50,100]   
> 
> $par1    
> [1] -1.0449563 -0.3782483 -0.9319105  0.8837459    
> 
> 

> 
> I believe you are seeing an error similar to this one:
> 
>> out[[1:3]] <- 1  
> Error in `[[<-`(`*tmp*`, i, value = value) :   
>  recursive indexing failed at level 2  
> 
> This is because double square brackets for lists can only set a single list element at once; grid[1, ] is longer.

> 
> Happy Christmas
> 
> Chris
> 
> 
> Chris Campbell
> Tel. +44 (0) 1249 705 450 | Mobile. +44 (0) 7929 628 349
> mailto:ccampbell at mango-solutions.com | http://www.mango-solutions.com
> Mango Solutions
> 2 Methuen Park
> Chippenham
> Wiltshire 
> SN14 OGB
> UK
> 
> -----Original Message-----
> From: r-help-bounces at r-project.org [mailto:r-help-bounces at r-project.org] On Behalf Of Jessica Streicher
> Sent: 20 December 2012 12:46
> To: R help
> Subject: [R] Filling Lists or Arrays of variable dimensions
> 
> Following problem:
> 
> Say you have a bunch of parameters and want to produce results for all combinations of those:
> 
> height<-c("high","low")
> width<-c("slim","wide")
> 
> then what i used to do was something like this:
> 
> l<-list()
> for(h in height){
> 	l[[h]]<-list()
> 	for(w in width){
> 		l[[h]][[w]] <- doSomething()
> 	}
> }
> 
> Now those parameters aren't always the same. Their number can change and the number of entries can change, and i'd like to have one code that can handle all configurations.
> 
> Now i thought i could use expand.grid() to get all configurations ,and than iterate over the rows, but the problem then is that i cannot set the values in the list like above.
> 
> grid<-expand.grid(height,width)
> l[[as.character(grid[1,])]] <-1
> Error in `[[<-`(`*tmp*`, as.character(grid[1, ]), value = 1) : 
>  no such index at level 1
> 
> This will only work if the "path" for that is already existent, and i'm not sure how to build that in this scenario. 
> 
> I then went on and built an array instead lists of lists, but that doesn't help either because i can't access the array with what i have in the grids row - or at least i don't know how.
> 
> Any ideas?
> 
> I'd prefer to keep the named lists since all other code is built towards this.
> ______________________________________________
> 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.
> 
> --
> 
> LEGAL NOTICE
> 
> This message is intended for the use of the named recipient(s) only and may contain
> confidential and / or privileged information. If you are not the intended recipient, please
> contact the sender and delete this message. Any unauthorised use of the information
> contained in this message is prohibited.
> 
> Mango Business Solutions Limited is registered in England under No. 4560258 with its
> registered office at Suite 3, Middlesex House, Rutherford Close, Stevenage, Herts, SG1 2EF,
> UK.
> 
> PLEASE CONSIDER THE ENVIRONMENT BEFORE PRINTING THIS EMAIL
> 




More information about the R-help mailing list