使用深度名称向量作为索引替换嵌套列表

标签 r list nested assign

取一个简单的嵌套列表L:

L <- list(lev1 = list(lev2 = c("bit1","bit2")), other=list(yep=1))
L
#$lev1
#$lev1$lev2
#[1] "bit1" "bit2"
#
# 
#$other
#$other$yep
#[1] 1

还有一个向量,为我想从 L 中选择的每个部分提供一系列深度:

sel <- c("lev1","lev2")

索引时我想要的结果是:

L[["lev1"]][["lev2"]]
#[1] "bit1" "bit2"

我可以像这样使用 Reduce 来概括:

Reduce(`[[`, sel, init=L)
#[1] "bit1" "bit2"

现在,我想扩展这个逻辑来做一个替换,像这样:

L[["lev1"]][["lev2"]] <- "new val"

,但我真的很困惑如何生成递归 [[ 选择,然后我也可以分配给它。

最佳答案

你为什么不能做

L[[sel]] <- "new val"

好吧,如果你想走很长的路那么 您仍然可以使用 ReducemodifyList或者你可以使用 [[<- .这是 modifyList 的示例:

modifyList(L,Reduce(function(x,y)setNames(list(x),y),rev(sel),init = "new val"))
$lev1
$lev1$lev2
[1] "new val"


$other
$other$yep
[1] 1

关于使用深度名称向量作为索引替换嵌套列表,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/59042112/

相关文章:

r - 在R中分组后选择聚合列的第n个值

java - 列表中的调用长度和列表的特定项目

json - 弹性嵌套查询-仅显示前2个内部匹配

r - 将向量中的每个元素与自身相乘以创建矩阵

R - 逗号分隔的列表之间是否至少有一个匹配项?

r - 除二向量

c# - 在循环中按 LastIndex 搜索列表。

list - mapMaybes/catMaybe 在 Windows 和 Ubuntu 中的工作方式不同

javascript - d3 用循环嵌套在几个键上

swift - 将 Tableview 放入 UITableViewCell Swift