Я хочу хранить непрямоугольные данные в структуре, например. в 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
не возвращает 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
это именно то, что я искал. Благодарю вас!
lst
в упаковкеtibble
кстати.