用向量的值替换递归列表的所有值

Dat*_*neR 16 recursion r list subset

说,我有以下递归列表:

rec_list <- list(list(rep(1,5), 10), list(rep(100, 4), 20:25))
rec_list
[[1]]
[[1]][[1]]
[1] 1 1 1 1 1

[[1]][[2]]
[1] 10


[[2]]
[[2]][[1]]
[1] 100 100 100 100

[[2]][[2]]
[1] 20 21 22 23 24 25
Run Code Online (Sandbox Code Playgroud)

现在,我想用向量替换列表的所有值seq_along(unlist(rec_list)),并保留列表的结构.我尝试使用像空的索引子集一样

rec_list[] <- seq_along(unlist(rec_list))
Run Code Online (Sandbox Code Playgroud)

但这不起作用.

如何在保持列表的原始结构的同时实现替换?

A5C*_*2T1 24

你可以使用relist:

relist(seq_along(unlist(rec_list)), skeleton = rec_list)
# [[1]]
# [[1]][[1]]
# [1] 1 2 3 4 5
# 
# [[1]][[2]]
# [1] 6
# 
# 
# [[2]]
# [[2]][[1]]
# [1]  7  8  9 10
# 
# [[2]][[2]]
# [1] 11 12 13 14 15 16
Run Code Online (Sandbox Code Playgroud)

  • 哦,来吧,你是怎么这么快找到这个功能的!:-0 (7认同)
  • @thelatemail,如果我没记错的话,那就是`unlist`. (2认同)

MrF*_*ick 5

如果要对嵌套列表的每个元素进行唯一索引,则可以从rapply()函数开始,该函数是该apply()族的递归形式.在这里,我使用一个特殊的函数,可以在任何结构的列表中唯一索引

rapply(rec_list, 
local({i<-0; function(x) {i<<-i+length(x); i+seq_along(x)-length(x)}}),     
how="replace")
Run Code Online (Sandbox Code Playgroud)

其他函数更简单,例如,如果你只想seq_along每个子向量

rapply(rec_list, seq_along, how="replace")
Run Code Online (Sandbox Code Playgroud)