如何用R语言的lapply和replicate生成顺序排列的列表?
解决R语言中嵌套列表转扁平连续列表的问题
这问题我之前也碰到过,嵌套列表确实有时候挺挠人的!你想要把lapply+replicate生成的两层嵌套列表,转换成从[[1]]到[[500]]的扁平结构,有两种简单的实现方式:
方法1:用unlist展开嵌套列表
你可以在原有代码基础上,外层套一个unlist()函数,关键是要设置recursive = FALSE——这个参数能保证只展开第一层嵌套,不会把每个rnorm(x)生成的向量也拆成单个元素:
flat_list <- unlist(lapply(1:5, function(x) replicate(100, rnorm(x), simplify = F)), recursive = FALSE)
这样处理后,flat_list的长度就是500,顺序是先100组rnorm(1),接着100组rnorm(2),直到最后100组rnorm(5),完全符合你要的连续索引结构。
方法2:直接生成目标向量再遍历(更简洁)
换个思路,先构造一个包含500个元素的向量,其中1重复100次,2重复100次……5重复100次,然后直接用lapply遍历这个向量生成结果,一步到位得到扁平列表:
flat_list <- lapply(rep(1:5, each = 100), rnorm)
这种写法更直观,不需要先生成嵌套列表再展开,代码更简洁,运行效率也和第一种方法差不多。
两种方法都能实现你要的效果,看你个人习惯选择就行~
内容的提问来源于stack exchange,提问作者user321627
相关产品推荐
相关产品推荐

