## ----knitr-setup, include = FALSE-----------------------------------------------------------------
require(container)
knitr::opts_chunk$set(
  comment = "#",
    error = FALSE,
     tidy = FALSE,
    cache = FALSE,
 collapse = TRUE
)
old <- options(width = 100L)

## -------------------------------------------------------------------------------------------------
co <- container()

## -------------------------------------------------------------------------------------------------
co[["x"]] <- 1
co <- c(co, 2)

co

## -------------------------------------------------------------------------------------------------
co <- add(co, x = 3)  # same as c(co, x = 3)

co

## ----error = TRUE---------------------------------------------------------------------------------
try({
d <- dict(x = 1)

add(d, x = 3)
})

## -------------------------------------------------------------------------------------------------
append(co, 1.5, after = 1)

## -------------------------------------------------------------------------------------------------
co[["x"]] <- 0
co[[2]] <- 12

co

## ----error = TRUE---------------------------------------------------------------------------------
try({
co[[4]] <- 3
})

## -------------------------------------------------------------------------------------------------
co[["y"]] <- 5

co

## ----eval = FALSE---------------------------------------------------------------------------------
# name <- "z"
# if (name %in% names(co)) {
#   co[[name]] <- 10
# } else {
#   stop("Name '", name,  "' does not exist.")
# }

## -------------------------------------------------------------------------------------------------
replace_at(co, x = 10, y = 13)            # name = value pairs

replace_at(co, c("x", "y"),  c(10, 13))   # names followed by values

replace_at(co, c(1, 4),      c(10, 13))   # positions followed by values

replace_at(co, list(1, "y"), c(10, 13))   # mixed indices followed by values

## ----error = TRUE---------------------------------------------------------------------------------
try({
replace_at(co, z = 10)

replace_at(co, "z", 10)

replace_at(co, 5, 10)
})

## ----error = TRUE---------------------------------------------------------------------------------
try({
co <- replace_at(co, z = 10, .add = TRUE)   # ok

co <- replace_at(co, 7, 10, .add = TRUE)

co
})

## -------------------------------------------------------------------------------------------------
co <- replace(co, old = 12, new = "foo")
co

co <- replace(co, old = 5, new = 1:2)
co

## ----error = TRUE---------------------------------------------------------------------------------
try({
replace(co, old = "non-existent-value", new = "my value")
})

## -------------------------------------------------------------------------------------------------
replace(co, old = "non-existent-value", new = "my value", add = TRUE)

## -------------------------------------------------------------------------------------------------
co[[1]]

co[["x"]]

co[3:5]

co[c("x", "y", "z")]

## -------------------------------------------------------------------------------------------------
at2(co, 1)

at2(co, "x")

at(co, 3:5)

at(co, c("x", "y", "z"))

## -------------------------------------------------------------------------------------------------
indices <- list("x", 4, "z")

at(co, indices)

## ----error = TRUE---------------------------------------------------------------------------------
try({
at2(co, 10)

at2(co, "a")

at(co, 3:6)

at(co, c("x", "a"))
})

## -------------------------------------------------------------------------------------------------
l <- list()

l[2:3]

l[["a"]]

## -------------------------------------------------------------------------------------------------
co

peek_at(co, 10, 11)

peek_at(co, 5:10)

peek_at2(co, "a")

## -------------------------------------------------------------------------------------------------
co

peek_at2(co, "a", default = -1)

peek_at(co, "z", "a", .default = -1)

peek_at(co, 4:8, .default = NA)

## -------------------------------------------------------------------------------------------------
l <- list(a = 1)

l

l[["a"]] <- NULL

l

## -------------------------------------------------------------------------------------------------
co[["x"]] <- NULL

co

## -------------------------------------------------------------------------------------------------
co

delete_at(co, 1, "y", "z")

delete(co, NULL, 1:2, 10)   # same but remove by value

## ----error = TRUE---------------------------------------------------------------------------------
try({
co

delete_at(co, "a")

delete_at(co, 10)

delete(co, 1:3)
})

## -------------------------------------------------------------------------------------------------
co

discard_at(co, 1, "a")

discard_at(co, 1:100)

discard(co, NULL, 1:2, 1:3, 1:4)    # discard by value

## -------------------------------------------------------------------------------------------------
c1 <- container(1, b = 2)
c2 <- container(   b = 0, c = 3)

update(c1, c2)

update(c2, c1)

## -------------------------------------------------------------------------------------------------
l1 <- list(1, b = 2)
l2 <- list(   b = 0, c = 3)

update(l1, l2)

update(l2, l1)

## -------------------------------------------------------------------------------------------------
modifyList(l1, l2)

modifyList(l2, l1)  # drops l1[[1]] = 1

## -------------------------------------------------------------------------------------------------
l1 <- list(a = 1, b = list(c = "a", d = FALSE))

l2 <- list(e = 2, b = list(d = TRUE))

modifyList(l1, l2)  # modifies l1$b$d from FALSE to TRUE

update(l1, l2)      # replaces l1$b by l2$b

## -------------------------------------------------------------------------------------------------
co <- container(a = 1, b = 2, c = 3, d = 4)

sapply(co, function(x) x^2)

Filter(co, f = function(x) x > 2)

Reduce(co, f = sum)

## ----include = FALSE----------------------------------------------------------
options(old)

