list_assign: Modify a list

View source: R/list-modify.R

list_assignR Documentation

Modify a list


  • list_assign() modifies the elements of a list by name or position.

  • list_modify() modifies the elements of a list recursively.

  • list_merge() merges the elements of a list recursively.

list_modify() is inspired by utils::modifyList().


list_assign(.x, ..., .is_node = NULL)

list_modify(.x, ..., .is_node = NULL)

list_merge(.x, ..., .is_node = NULL)



List to modify.


New values of a list. Use zap() to remove values.

These values should be either all named or all unnamed. When inputs are all named, they are matched to .x by name. When they are all unnamed, they are matched by position.

Dynamic dots are supported. In particular, if your replacement values are stored in a list, you can splice that in with ⁠!!!⁠.


A predicate function that determines whether an element is a node (by returning TRUE) or a leaf (by returning FALSE). The default value, NULL, treats simple lists as nodes and everything else (including richer objects like data frames and linear models) as leaves, using vctrs::vec_is_list(). To recurse into all objects built on lists use is.list().


x <- list(x = 1:10, y = 4, z = list(a = 1, b = 2))

# Update values
str(list_assign(x, a = 1))
# Replace values
str(list_assign(x, z = 5))
str(list_assign(x, z = NULL))

str(list_assign(x, z = list(a = 1:5)))
# replace recursively, leaving the other elements of z alone
str(list_modify(x, z = list(a = 1:5)))

# Remove values
str(list_assign(x, z = zap()))

# Combine values with list_merge()
str(list_merge(x, x = 11, z = list(a = 2:5, c = 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))

purrr documentation built on Aug. 10, 2023, 9:08 a.m.