简体   繁体   中英

efficient way to create a list of lists

I am using lapply and mapply to create a bunch of operations. My data is composed of lists.

For one of the calculations I am having some problems on how to use any of the apply functions. This is an example of what I want to do:

#list with a collection of objects, each object has a vector with the their 2 closest neighbors identification. 
list_a<-list(c(2,4),c(1,3),c(1,4),c(3,2))

#list with the obs of each point
list_obs<-list(runif(1000,1,2),runif(1000,0,2),runif(1000,0.5,2),runif(1000,0.1,1.5))

position n in list_a corresponds to the neigh. points of point n

position n in list_obs corresponds to observations of point n

What I want to do is to create a new list that will store in each position n the list of observations of the neighb. points:

#output
 out=list(list(list_obs[[2]],list_obs[[4]]),list(list_obs[[1]],list_obs[[3]]),list(list_obs[[1]],list_obs[[4]]),list(list_obs[[3]],list_obs[[2]]))
> str(out)
List of 4
 $ :List of 2
  ..$ : num [1:1000] 1.673 1.423 0.228 1.758 1.65 ...
  ..$ : num [1:1000] 0.679 1.341 0.148 0.867 0.724 ...
 $ :List of 2
  ..$ : num [1:1000] 1.25 1.5 1.58 1.54 1.6 ...
  ..$ : num [1:1000] 0.526 1.545 1.848 0.711 0.697 ...
 $ :List of 2
  ..$ : num [1:1000] 1.25 1.5 1.58 1.54 1.6 ...
  ..$ : num [1:1000] 0.679 1.341 0.148 0.867 0.724 ...
 $ :List of 2
  ..$ : num [1:1000] 0.526 1.545 1.848 0.711 0.697 ...
  ..$ : num [1:1000] 1.673 1.423 0.228 1.758 1.65 ...

Can anyone advise me on the best way to do this?

My data is huge, so a loop will take 2 much time to run. The data is composed of 3000 points (with 3000-1 neigh.), each point with +20.000 observations.

您是否尝试过以下命令?

lapply(list_a, function(x) list_obs[x])
lapply(list_a,FUN=function(x)lapply(x,FUN=function(y)list_obs[y]))

but, as per comments, there might be a better way to do it

sorry saw that was just answered!

lapply(list_a,FUN=function(x)list_obs[x]) 

is better!

The technical post webpages of this site follow the CC BY-SA 4.0 protocol. If you need to reprint, please indicate the site URL or the original address.Any question please contact:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM