Asignación de un valor a un elemento de la lista usando `asignar ()`

Un poco de contexto primero ...

He escrito una función infija que, en esencia, reemplaza el idioma

x[[length(x) +1]] <- y

..o simplementex <- append(x, y) para vectores.

Aquí está

`%+=%` <- function(x, y) {
  xcall <- substitute(x)
  xobjname <- setdiff(all.names(xcall), c("[[", "[", ":", "$"))
  # if the object doesn't exist, create it
  if (!exists(xobjname, parent.frame(), mode = "list") &&
      !exists(xobjname, parent.frame(), mode = "numeric") &&
      !exists(xobjname, parent.frame(), mode = "character")) {
    xobj <- subset(y, FALSE)
  } else {
    xobj <- eval(xcall, envir = parent.frame())
  }

  if (is.atomic(xobj)) {
    if (!is.atomic(y)) {
      stop('Cannot append object of mode ', dQuote(mode(y)), 
           ' to atomic structure ', xobjname)
    }
    assign(xobjname, append(xobj, y), envir = parent.frame())
    return(invisible())
  }

  if (is.list(xobj)) {
    if (is.atomic(y)) {
      xobj[[length(xobj) + 1]] <- y
    } else {
      for (i in seq_along(y)) {
        xobj[[length(xobj) + 1]] <- y[[i]]
        names(xobj)[length(xobj)] <- names(y[i])
      }
    }
    assign(xobjname, xobj, envir = parent.frame())
    return(invisible())
  }

  stop("Can't append to an object of mode ", 
       mode(eval(xcall, envir = parent.frame())))
}

Funciona según lo previsto con vectores o listas, pero el límite en su forma actual es que no puedo agregar un valor a un elemento dentro de una lista, por ejemplo

a <- list(a = 1, b = 2)
a$b %+=% 3

Hasta ahora no he encontrado cómo hacerlo. He intentado algo como lo siguiente, pero no tiene ningún efecto:

assign("b", append(a$b, 3), envir = as.environment(a))

¿Algunas ideas

Respuestas a la pregunta(1)

Su respuesta a la pregunta