如何递归遍历 R 列表中的所有键值对并修改值? [复制]
Posted
技术标签:
【中文标题】如何递归遍历 R 列表中的所有键值对并修改值? [复制]【英文标题】:How do I iterate over all the key value pairs recursively in a R list and modify a value? [duplicate] 【发布时间】:2019-10-06 18:32:45 【问题描述】:我想根据某些条件递归地修改列表的值。
mylist = list(a = "test1",
b = list(bb = "test2", list(bbb = "test1")),
c = "test2")
如果它是 test1,我想修改该值并将其替换到此列表中或创建一个新列表。例如,如果修改是将 test1 替换为 best1,则结果列表应为
mylist = list(a = "best1",
b = list(bb = "test2", list(bbb = "best1")),
c = "test2")
在 R 中最简洁的方法是什么?
【问题讨论】:
试试:rapply(mylist, function(i) ifelse(i == "test1", "best1", i), how = "replace")
【参考方案1】:
编辑:
我的原始答案(下)unlist
s。但是,我们可以使用purrr
和plyr
来实现类似列表的替换:
plyr::llply(purrr::flatten(mylist),
function(x) ifelse(x=="test1","best1",x))
$a
[1] "best1"
$bb
[1] "test2"
[[3]]
bbb
"best1"
$c
[1] "test2"
原创:
我们可以使用:
lapply(Map(unlist,mylist),function(x) ifelse(x=="test1","best1",x))
$a
[1] "best1"
$b
bb bbb
"test2" "best1"
$c
[1] "test2"
【讨论】:
【参考方案2】:您可以使用rapply
out <- rapply(mylist, function(x) replace(x, x == "test1", "best1"), how = "replace")
检查输出
identical(out,
list(a = "best1",
b = list(bb = "test2", list(bbb = "best1")),
c = "test2"))
# [1] TRUE
【讨论】:
以上是关于如何递归遍历 R 列表中的所有键值对并修改值? [复制]的主要内容,如果未能解决你的问题,请参考以下文章
我正在尝试通过外部 api 从 json 数据中获取键值对并使用 angular 和 typescript 显示它。我怎样才能做到这一点?