r - 指向嵌套列表元素的指针
问题描述
采取以下列表:
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中是否有任何习语可以使代码更简洁和可读?
解决方案
这是一个未在非常深的列表上测试的解决方案base
:purrr
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
推荐阅读
- mysql - 选择仅在上个月每三个发生的数据,以及仅在上个月的前三个和最后三个发生的数据
- php - 我的错误:您的 SQL 语法有错误;检查与您的 MySQL 服务器版本相对应的手册
- google-sheets - 将亚马逊列表中的文本提取到 Google 表格中的最佳方法是什么?
- python - 如何在 django 上更新时检查唯一性
- javascript - 如何使用 ACE 编辑器运行 Python
- qt - 来自 QKeyEvent 的文本输入不适用于 QTextDocument 中的俄语字母
- c# - <%@ 注册程序集="Microsoft.ReportViewer.WebForms, >
- godot - 如何修复 Godot 中的“基础运动体上的无效设置索引位置”错误?
- ios - 渐变颜色在非英语语言的 UILabel 中被截断
- node.js - 使用 apex.run 将 AWS IAM 角色导入 terraform 状态