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

R: Reference list item within the same list

提问人:Christopher 提问时间:4/2/2020 最后编辑:Christopher 更新时间:4/4/2020 访问量:291

问:

在 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 中是可能的(即返回上面给出的列表)?

编辑:我认为这归结为一个问题,“我们可以使用保留手动编码列表所有方面的语言对象来调用列表吗?(具体而言,将列表的名称属性分配给语言元素的左侧)。

在我看来,以下表明这样的解决方案是无望的。

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))
r list dplyr 赋值运算符 tibble

评论

0赞 Chris 4/2/2020
在上面输入您的函数后:%=%,所以也许是通话中的问题。嗯,不是。 %=%%=%。但话又说回来,作为一项任务.从中我建议您尚未在函数运算符上建立打印方法或类似的东西。这可能会成为更好的问题。> class(%=%) Error: unexpected SPECIAL in "class(%=%" > class() [1] "function"ticks> list( a1, b = a) Error: unexpected symbol in "list( a"> whatever <- list( a %=% 1, b = a) > str(whatever) List of 2 $ : Named num 1 ..- attr(*, "names")= chr "a" $ b: num 1%=%
0赞 Chris 4/2/2020
实际上是词法范围,而不是打印方法。因此,我们看到,在赋值下,您的函数可以正常工作。
0赞 Christopher 4/4/2020
@Chris感谢您的评论。我不太确定你的意思。该函数不返回相同的列表:返回 FALSE。identical(list(a%=%1, b=a),list(a=a <- 1, b=a))

答:

1赞 Christopher 4/3/2020 #1

Welp,背后的聪明人已经在他们的功能中发现了这一点(也在包中tibblelst()dplyr)

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

多么有用的功能!