R:同一列表中的引用列表项

R: Reference list item within the same list

在 R 中,我们可以引用在同一个列表中创建的项目,即:

list(a = a <- 1, b = a)

我很好奇是否有一种方法可以编写一个函数来代替 a = a <- 1。也就是说,如果像

`%=%` <- function(x,y) {
  envir <- environment()
  char_x <- deparse(substitute(x))
  assign(char_x, y, parent.env(envir))
  unlist(lapply(setNames(seq_along(x),char_x), function(T) y))
}
# does not work
list(a%=%1, b=a)

在 R 中是可能的(即 returns 上面给出的列表)?

编辑:我认为这归结为询问,'can we call list with a language object that preserves all aspects of manually coding list?'(具体来说,将列表的名称属性分配给语言元素的左侧)。

在我看来,下面显示这样的解决方案是无望的。

my_call <- do.call(substitute, list(expr(expr = {x = y}), list(x=quote(a), y=1)))
equals <- languageEl(my_call, which = 1)
str(equals)
do.call(list, list(equals))

好吧,tibble 背后的聪明人已经在他们的 lst() 函数中解决了这个问题(也在包 dplyr 中)

library(dplyr)
lst(a=1, b=a, c=c(3,4), d=c)

多么有用的功能!