如何在R列表中递归遍历所有键值对并修改值?

Dev*_*kan 4 replace r list

我想根据某些条件递归地修改列表的值。

mylist = list(a = "test1", 
              b = list(bb = "test2", list(bbb = "test1")), 
              c = "test2")
Run Code Online (Sandbox Code Playgroud)

我想修改值为test1的值,并将其替换在此列表中或创建一个新列表。例如,如果修改是将test1替换为best1,则结果列表应为

mylist = list(a = "best1", 
              b = list(bb = "test2", list(bbb = "best1")), 
              c = "test2")
Run Code Online (Sandbox Code Playgroud)

在R中最干净的方法是什么?

mar*_*kus 5

您可以使用 rapply

out <- rapply(mylist, function(x) replace(x, x == "test1", "best1"), how = "replace")
Run Code Online (Sandbox Code Playgroud)

检查输出

identical(out, 
          list(a = "best1", 
               b = list(bb = "test2", list(bbb = "best1")), 
               c = "test2"))
# [1] TRUE
Run Code Online (Sandbox Code Playgroud)