Changing for loop into apply equivalent

Hello,

I would like to replace my for loop here with the equivalent sapply or lapply to get final_list as it is below. Any ideas?

library(magrittr)

position_list <- c(2,3,4,5,6,7,8,10,11,14,16,17,18,22,24,26,28,32,34,37,41,42,43,44,47,51,53,54,55,59) 
  
  
  
  final_list <- list() %>% rep("",max(position_list))  

  for(i in position_list){
   
    final_list[[i]] <- i
    
  }
    
  final_list <- final_list %>% as.list()
  
  
  final_list
#> [[1]]
#> NULL
#> 
#> [[2]]
#> [1] 2
#> 
#> [[3]]
#> [1] 3
#> 
#> [[4]]
#> [1] 4
#> 
#> [[5]]
#> [1] 5
#> 
#> [[6]]
#> [1] 6
#> 
#> [[7]]
#> [1] 7
#> 
#> [[8]]
#> [1] 8
#> 
#> [[9]]
#> NULL
#> 
#> [[10]]
#> [1] 10
#> 
#> [[11]]
#> [1] 11
#> 
#> [[12]]
#> NULL
#> 
#> [[13]]
#> NULL
#> 
#> [[14]]
#> [1] 14
#> 
#> [[15]]
#> NULL
#> 
#> [[16]]
#> [1] 16
#> 
#> [[17]]
#> [1] 17
#> 
#> [[18]]
#> [1] 18
#> 
#> [[19]]
#> NULL
#> 
#> [[20]]
#> NULL
#> 
#> [[21]]
#> NULL
#> 
#> [[22]]
#> [1] 22
#> 
#> [[23]]
#> NULL
#> 
#> [[24]]
#> [1] 24
#> 
#> [[25]]
#> NULL
#> 
#> [[26]]
#> [1] 26
#> 
#> [[27]]
#> NULL
#> 
#> [[28]]
#> [1] 28
#> 
#> [[29]]
#> NULL
#> 
#> [[30]]
#> NULL
#> 
#> [[31]]
#> NULL
#> 
#> [[32]]
#> [1] 32
#> 
#> [[33]]
#> NULL
#> 
#> [[34]]
#> [1] 34
#> 
#> [[35]]
#> NULL
#> 
#> [[36]]
#> NULL
#> 
#> [[37]]
#> [1] 37
#> 
#> [[38]]
#> NULL
#> 
#> [[39]]
#> NULL
#> 
#> [[40]]
#> NULL
#> 
#> [[41]]
#> [1] 41
#> 
#> [[42]]
#> [1] 42
#> 
#> [[43]]
#> [1] 43
#> 
#> [[44]]
#> [1] 44
#> 
#> [[45]]
#> NULL
#> 
#> [[46]]
#> NULL
#> 
#> [[47]]
#> [1] 47
#> 
#> [[48]]
#> NULL
#> 
#> [[49]]
#> NULL
#> 
#> [[50]]
#> NULL
#> 
#> [[51]]
#> [1] 51
#> 
#> [[52]]
#> NULL
#> 
#> [[53]]
#> [1] 53
#> 
#> [[54]]
#> [1] 54
#> 
#> [[55]]
#> [1] 55
#> 
#> [[56]]
#> NULL
#> 
#> [[57]]
#> NULL
#> 
#> [[58]]
#> NULL
#> 
#> [[59]]
#> [1] 59

Created on 2021-07-28 by the reprex package (v2.0.0)

Not an answer using apply, but how's this?

position_list <- c(2,3,4,5,6,7,8,10,11,14,16,17,18,22,24,26,28,32,34,37,41,42,43,44,47,51,53,54,55,59) 
# I think this is a better way to initialise an empty list:
final_list <- vector(mode = 'list', max(position_list))
#...and then this should replace your for-loop
final_list[position_list] <- position_list
final_list
#> [[1]]
#> NULL
#> 
#> [[2]]
#> [1] 2
#> 
#> [[3]]
#> [1] 3
#> 
#> [[4]]
#> [1] 4
#> 
#> [[5]]
#> [1] 5
#> 
#> [[6]]
#> [1] 6
#> 
#> [[7]]
#> [1] 7
#> 
#> [[8]]
#> [1] 8
#> 
#> [[9]]
#> NULL
#> 
#> [[10]]
#> [1] 10
#> 
#> [[11]]
#> [1] 11
#> 
#> [[12]]
#> NULL
#> 
#> [[13]]
#> NULL
#> 
#> [[14]]
#> [1] 14
#> 
#> [[15]]
#> NULL
#> 
#> [[16]]
#> [1] 16
#> 
#> [[17]]
#> [1] 17
#> 
#> [[18]]
#> [1] 18
#> 
#> [[19]]
#> NULL
#> 
#> [[20]]
#> NULL
#> 
#> [[21]]
#> NULL
#> 
#> [[22]]
#> [1] 22
#> 
#> [[23]]
#> NULL
#> 
#> [[24]]
#> [1] 24
#> 
#> [[25]]
#> NULL
#> 
#> [[26]]
#> [1] 26
#> 
#> [[27]]
#> NULL
#> 
#> [[28]]
#> [1] 28
#> 
#> [[29]]
#> NULL
#> 
#> [[30]]
#> NULL
#> 
#> [[31]]
#> NULL
#> 
#> [[32]]
#> [1] 32
#> 
#> [[33]]
#> NULL
#> 
#> [[34]]
#> [1] 34
#> 
#> [[35]]
#> NULL
#> 
#> [[36]]
#> NULL
#> 
#> [[37]]
#> [1] 37
#> 
#> [[38]]
#> NULL
#> 
#> [[39]]
#> NULL
#> 
#> [[40]]
#> NULL
#> 
#> [[41]]
#> [1] 41
#> 
#> [[42]]
#> [1] 42
#> 
#> [[43]]
#> [1] 43
#> 
#> [[44]]
#> [1] 44
#> 
#> [[45]]
#> NULL
#> 
#> [[46]]
#> NULL
#> 
#> [[47]]
#> [1] 47
#> 
#> [[48]]
#> NULL
#> 
#> [[49]]
#> NULL
#> 
#> [[50]]
#> NULL
#> 
#> [[51]]
#> [1] 51
#> 
#> [[52]]
#> NULL
#> 
#> [[53]]
#> [1] 53
#> 
#> [[54]]
#> [1] 54
#> 
#> [[55]]
#> [1] 55
#> 
#> [[56]]
#> NULL
#> 
#> [[57]]
#> NULL
#> 
#> [[58]]
#> NULL
#> 
#> [[59]]
#> [1] 59

Created on 2021-07-28 by the reprex package (v2.0.0)

Regards,
Ron.

1 Like

This is pretty eloquent and solves my problem! Thanks so much :slight_smile:

This topic was automatically closed 7 days after the last reply. New replies are no longer allowed.

If you have a query related to it or one of the replies, start a new topic and refer back with a link.