modify_in: Modify a pluck location

View source: R/pluck-assign.R

modify_inR Documentation

Modify a pluck location


  • assign_in() takes a data structure and a pluck location, assigns a value there, and returns the modified data structure.

  • modify_in() applies a function to a pluck location, assigns the result back to that location with assign_in(), and returns the modified data structure.


modify_in(.x, .where, .f, ...)

assign_in(x, where, value)


.x, x

A vector or environment

.where, where

A pluck location, as a numeric vector of positions, a character vector of names, or a list combining both. The location must exist in the data structure.


A function to apply at the pluck location given by .where.


Arguments passed to .f.


A value to replace in .x at the pluck location. Use zap() to instead remove the element.

See Also



# Recall that pluck() returns a component of a data structure that
# might be arbitrarily deep
x <- list(list(bar = 1, foo = 2))
pluck(x, 1, "foo")

# Use assign_in() to modify the pluck location:
str(assign_in(x, list(1, "foo"), 100))
# Or zap to remove it
str(assign_in(x, list(1, "foo"), zap()))

# Like pluck(), this works even when the element (or its parents) don't exist
pluck(x, 1, "baz")
str(assign_in(x, list(2, "baz"), 100))

# modify_in() applies a function to that location and update the
# element in place:
modify_in(x, list(1, "foo"), \(x) x * 200)

# Additional arguments are passed to the function in the ordinary way:
modify_in(x, list(1, "foo"), `+`, 100)

purrr documentation built on Jan. 10, 2023, 5:15 p.m.