R: Ссылочный элемент списка в том же списке - PullRequest
0 голосов
/ 02 апреля 2020

В R мы можем ссылаться на элементы, созданные в этом же списке, например:

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

Мне интересно, если есть способ написать функцию, которая заменяет a = a <- 1. То есть, если в R возможно что-то вроде

`%=%` <- 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)

(т.е. возвращает приведенный выше список)? объект языка, который сохраняет все аспекты списка ручного кодирования? (в частности, присваивает атрибуту имен списка левую часть элемента языка).

Мне кажется, что ниже показано, что такое решение безнадежно.

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))

1 Ответ

0 голосов
/ 02 апреля 2020

Welp, умные люди, стоящие за tibble, поняли это в своей функции lst() (также в пакете dplyr)

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

Какая полезная функция!

...