-
list_assign()
按名称或位置修改列表的元素。 -
list_modify()
递归地修改列表的元素。 -
list_merge()
递归地合并列表的元素。
list_modify()
的灵感来自 utils::modifyList()
。
用法
list_assign(.x, ..., .is_node = NULL)
list_modify(.x, ..., .is_node = NULL)
list_merge(.x, ..., .is_node = NULL)
参数
- .x
-
要修改的列表。
- ...
-
列表的新值。使用
zap()
删除值。这些值应该全部命名或全部未命名。当输入全部命名时,它们按名称与
.x
匹配。当它们都未命名时,它们按位置进行匹配。支持Dynamic dots。特别是,如果您的替换值存储在列表中,您可以将其与
!!!
拼接。 - .is_node
-
一个谓词函数,用于确定元素是节点(通过返回
TRUE
)还是叶(通过返回FALSE
)。默认值NULL
使用vctrs::vec_is_list()
将简单列表视为节点,将其他所有内容(包括 DataFrame 和线性模型等更丰富的对象)视为叶子。要递归到列表上构建的所有对象,请使用is.list()
。
例子
x <- list(x = 1:10, y = 4, z = list(a = 1, b = 2))
str(x)
#> List of 3
#> $ x: int [1:10] 1 2 3 4 5 6 7 8 9 10
#> $ y: num 4
#> $ z:List of 2
#> ..$ a: num 1
#> ..$ b: num 2
# Update values
str(list_assign(x, a = 1))
#> List of 4
#> $ x: int [1:10] 1 2 3 4 5 6 7 8 9 10
#> $ y: num 4
#> $ z:List of 2
#> ..$ a: num 1
#> ..$ b: num 2
#> $ a: num 1
# Replace values
str(list_assign(x, z = 5))
#> List of 3
#> $ x: int [1:10] 1 2 3 4 5 6 7 8 9 10
#> $ y: num 4
#> $ z: num 5
str(list_assign(x, z = NULL))
#> List of 3
#> $ x: int [1:10] 1 2 3 4 5 6 7 8 9 10
#> $ y: num 4
#> $ z: NULL
str(list_assign(x, z = list(a = 1:5)))
#> List of 3
#> $ x: int [1:10] 1 2 3 4 5 6 7 8 9 10
#> $ y: num 4
#> $ z:List of 1
#> ..$ a: int [1:5] 1 2 3 4 5
# replace recursively, leaving the other elements of z alone
str(list_modify(x, z = list(a = 1:5)))
#> List of 3
#> $ x: int [1:10] 1 2 3 4 5 6 7 8 9 10
#> $ y: num 4
#> $ z:List of 2
#> ..$ a: int [1:5] 1 2 3 4 5
#> ..$ b: num 2
# Remove values
str(list_assign(x, z = zap()))
#> List of 2
#> $ x: int [1:10] 1 2 3 4 5 6 7 8 9 10
#> $ y: num 4
# Combine values with list_merge()
str(list_merge(x, x = 11, z = list(a = 2:5, c = 3)))
#> List of 3
#> $ x: num [1:11] 1 2 3 4 5 6 7 8 9 10 ...
#> $ y: num 4
#> $ z:List of 3
#> ..$ a: num [1:5] 1 2 3 4 5
#> ..$ b: num 2
#> ..$ c: num 3
# All these functions support dynamic dots features. Use !!! to splice
# a list of arguments:
l <- list(new = 1, y = zap(), z = 5)
str(list_assign(x, !!!l))
#> List of 3
#> $ x : int [1:10] 1 2 3 4 5 6 7 8 9 10
#> $ z : num 5
#> $ new: num 1
相关用法
- R purrr list_transpose 转置列表
- R purrr list_simplify 将列表简化为原子或 S3 向量
- R purrr list_flatten 压平列表
- R purrr list_c 将列表元素组合成单个数据结构
- R purrr lmap 将函数应用于列表的列表元素
- R purrr accumulate 累积向量缩减的中间结果
- R purrr imap 将函数应用于向量的每个元素及其索引
- R purrr as_vector 将列表强制转换为向量
- R purrr map_if 有条件地将函数应用于向量的每个元素
- R purrr map2 映射两个输入
- R purrr array-coercion 强制数组列出
- R purrr auto_browse 包装一个函数,以便在出错时自动 browser()
- R purrr pluck 安全地获取或设置嵌套数据结构深处的元素
- R purrr insistently 将函数转换为等待,然后在错误后重试
- R purrr map_depth 在给定深度映射/修改元素
- R purrr rerun 多次重新运行表达式
- R purrr quietly 包装一个函数来捕获副作用
- R purrr pmap 同时映射多个输入(“并行”)
- R purrr possibly 包装函数以返回值而不是错误
- R purrr head_while 查找全部满足谓词的头/尾。
- R purrr rbernoulli 从伯努利分布生成随机样本
- R purrr rate-helpers 创建延迟率设置
- R purrr keep_at 根据元素的名称/位置保留/丢弃元素
- R purrr keep 根据元素的值保留/丢弃元素
- R purrr transpose 转置列表。
注:本文由纯净天空筛选整理自Hadley Wickham等大神的英文原创作品 Modify a list。非经特殊声明,原始代码版权归原作者所有,本译文未经允许或授权,请勿转载或复制。