首页 > 解决方案 > 指向嵌套列表元素的指针

问题描述

采取以下列表:

lst <- list(a = 1, b = list(c = 2, d = 3))

现在我想要一个指向d元素的指针,这样当我更新它的值时,它就会反映在原始列表中。例如:

d <- lst[['b']][['d']] # d should be a reference.
update(d, 5) # custom function for updating by reference.
lst[['b']][['d']]
#> [1] 5 

我为什么要这个?因为我对多个级别的列表进行了各种更新,这导致了类似于以下的繁琐代码:

lst[['b']][['d']] <- some_function(lst[['b']][['d']], lst[['b']][['c']])

所以我想知道R中是否有任何习语可以使代码更简洁和可读?

标签: r

解决方案


这是一个未在非常深的列表上测试的解决方案basepurrr

lapply(lst, function(x) purrr::modify_at(x,2,function(x) 5))

或者正如@akrun 所建议的那样,modify_in这否定了对lapply

modify_in(lst, list('b', 'd'), ~ 5)

结果:

$a
[1] 1

$b
$b$c
[1] 2

$b$d
[1] 5

推荐阅读