Почему мутирование списка-столбца со списком из одного элемента приводит к глубокой копии? - PullRequest
0 голосов
/ 22 февраля 2019

Я не знал, что создание нового столбца списка с 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)

...