
14.2
パイプの代用
231
diamonds <- ggplot2::diamonds
diamonds2 <- diamonds %>%
dplyr::mutate(price_per_carat = price / carat)
pryr::object_size(diamonds)
#> 3.46 MB
pryr::object_size(diamonds2)
#> 3.89 MB
pryr::object_size(diamonds, diamonds2)
#> 3.89 MB
pryr::object_size()
は、引数すべてで占有するメモリ量を返します。結果は直感に反している
ように思えるでしょう。
●
diamonds
は3.46MB
●
diamonds2
は3.89MB
●
diamonds
と
diamonds2
を合わせても3.89MB
な ぜ こう な る の で し ょ う か。
diamonds2
は
diamonds
と10列を 共 有 し て い ま す。 こ れ ら を2
重に持つ必要がありません。どちらかを変更した時だけ、コピーが作られます。次の例では、
diamonds$carat
の値を1 つ変更します。すなわち、2 つのデータフレームでは、もはや
carat
変数を
共有できずコピーが作られます。それぞれのデータフレームのサイズは変わりませんが、合わせたサ
イズは増えます。
diamonds$carat[1] <- NA
pryr::object_size(diamonds)
#> 3.46 MB ...