Я не знал, что создание нового столбца списка с dplyr::mutate()
с одноэлементным списком фактически копирует элемент, чтобы заполнить длину таблицы (см. t3
).Это почему?
Если я укажу правильную длину явно (t4
) или передам ее при создании таблицы (t5
), элементы передаются по ссылке.
Рассмотрим следующий случай, гдесписок содержит тиббл с большим вектором.
library(tidyverse)
library(pryr)
t1 <- tibble(a = 1:4)
t2 <- tibble(b = 1:1e6)
t3 <- mutate(t1, tl = list(t2))
t4 <- mutate(t1, tl = rep(list(t2), n()))
t5 <- tibble(a = 1:4, tl = list(t2))
object_size(t2)
#> 4 MB
object_size(t3)
#> 16 MB
object_size(t4)
#> 4 MB
object_size(t5)
#> 4 MB
Создан в 2019-02-22 с помощью пакета prex (v0.2.1)