有没有办法初始化或修改允许引用以前值的列表?

Is there a way to initialize or modify a list that allows to reference previous values?

我想在结构中存储非矩形数据,例如在 list.

引用以前的数据可以使用 tibble,例如像这样:

dat <- tibble(a = 2, 
              b = list(c(a + 1, a + 2)),
              c = list(tibble(a = a, b = 3)))

请注意,因为 tibble 不允许 tibble 在列中(否则数据将不是矩形),我们必须将 tibble 包装在列表中,并且 dat$c 不 return tibble,因为我们需要 dat$c[[1]].

后一个问题可以用list解决。

dat2 <- list(a = 2, 
             b = c(3, 4), 
             c = tibble(a = 2, b = 3))

但是,现在我无法参考以前的条目构造数据元素:

dat2 <- list(a = 2, 
             b = c(a + 1, a + 2), 
             c = tibble(a = a, b = 3))
> Error: object 'a' not found

我的问题:有没有一种方法可以构造一个非矩形数据结构,该数据结构确实支持通过引用以前的条目进行构造?

可以参考a = (a <- 2)

dat <- tibble(
    a = (a<-2),
    b = list(c(a + 1, a + 2)),
    c = list(tibble(a = a, b = 3))
)

你会看到

> str(dat)
tibble [1 x 3] (S3: tbl_df/tbl/data.frame)
 $ a: num 2
 $ b:List of 1
  ..$ : num [1:2] 3 4
 $ c:List of 1
  ..$ : tibble [1 x 2] (S3: tbl_df/tbl/data.frame)
  .. ..$ a: num 2
  .. ..$ b: num 3

您可以使用 lst() 代替:

lst(a = 2, 
    b = c(a + 1, a + 2), 
    c = tibble(a = a, b = 3))

$a
[1] 2

$b
[1] 3 4

$c
# A tibble: 1 × 2
      a     b
  <dbl> <dbl>
1     2     3