如何递归遍历 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】:

编辑: 我的原始答案(下)unlists。但是,我们可以使用purrrplyr 来实现类似列表的替换:

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 列表中的所有键值对并修改值? [复制]的主要内容,如果未能解决你的问题,请参考以下文章

PHP遍历键值对数组

我正在尝试通过外部 api 从 json 数据中获取键值对并使用 angular 和 typescript 显示它。我怎样才能做到这一点?

Hashtable一个键多个值 在遍历怎么做啊

Python ❀ 字典

Python ❀ 字典

遍历多个hashmap键并在jsp上显示[重复]