class: center, middle, inverse, title-slide # スケーリング処理 ## Part of 📖Data Preprocessing Cookbook 👨🍳 ### Uryu Shinya ###
uribo
u_ribo
### 2019-06-29 (updated: 2019-06-30) --- # 概要 - データが取り得る値の規模 (scale)をデータ間で揃える処理 - 分布には影響しない - 異なる単位をもつデータを扱う場合に役立つ --> 連続変数からなる多くのデータに該当する - 体重 (kg)と身長 (cm)... 同じ値120であってもそれぞれ意味合いが異なるため比較できない - 多くのモデルではスケーリングが行われていることが前提となる - リッジ回帰、主成分分析では特に注意 - 木ベースのモデルではスケーリングを気にしない <table> <caption>地価データにおける「地価」、「最寄駅からの距離」「地籍」「該当する市町村の夜間人口」の要約統計量</caption> <thead> <tr> <th style="text-align:left;"> variable </th> <th style="text-align:right;"> mean </th> <th style="text-align:right;"> min </th> <th style="text-align:right;"> max </th> <th style="text-align:right;"> sd </th> <th style="text-align:left;"> unit </th> </tr> </thead> <tbody> <tr> <td style="text-align:left;"> posted_land_price </td> <td style="text-align:right;"> 415432 </td> <td style="text-align:right;"> 613 </td> <td style="text-align:right;"> 55500000 </td> <td style="text-align:right;"> 1766361 </td> <td style="text-align:left;"> 円/m2 </td> </tr> <tr> <td style="text-align:left;"> distance_from_station </td> <td style="text-align:right;"> 1566 </td> <td style="text-align:right;"> 0 </td> <td style="text-align:right;"> 24000 </td> <td style="text-align:right;"> 1965 </td> <td style="text-align:left;"> m </td> </tr> <tr> <td style="text-align:left;"> acreage </td> <td style="text-align:right;"> 751 </td> <td style="text-align:right;"> 46 </td> <td style="text-align:right;"> 413215 </td> <td style="text-align:right;"> 7247 </td> <td style="text-align:left;"> m2 </td> </tr> <tr> <td style="text-align:left;"> night_population </td> <td style="text-align:right;"> 259450 </td> <td style="text-align:right;"> 3214 </td> <td style="text-align:right;"> 903346 </td> <td style="text-align:right;"> 197976 </td> <td style="text-align:left;"> 人 </td> </tr> </tbody> </table> 比較対象の変数間で平均と分散が異なることに起因する問題 ```r x <- df_lp_kanto$distance_from_station ``` --- # 中心化 (centering) - 平均を0にする - データの値を定数(平均値が利用されることが多い)によって引く `$$\tilde{x} = x - mean(x)$$` .pull-left[ ```r x_center <- x - mean(x) mean(x_center) ``` ``` ## [1] 6.15e-14 ``` ] .pull-right[ ```r df_lp_kanto %>% recipe(~ distance_from_station) %>% * step_center(all_predictors()) %>% prep(training = df_lp_kanto) %>% bake(new_data = df_lp_kanto) %>% summarise(mean = mean(distance_from_station), sd = sd(distance_from_station)) %>% knitr::kable(format = "html") ``` <table> <thead> <tr> <th style="text-align:right;"> mean </th> <th style="text-align:right;"> sd </th> </tr> </thead> <tbody> <tr> <td style="text-align:right;"> 0 </td> <td style="text-align:right;"> 1965 </td> </tr> </tbody> </table> ] --- # スケーリング (scaling) - 特徴量を分散で割ることにより、分散1を得る `$$s^2 = \frac{x}{var(x)}$$` .pull-left[ ```r sd(x / sd(x)) ``` ``` ## [1] 1 ``` ] .pull-right[ ```r df_lp_kanto %>% recipe(~ distance_from_station) %>% * step_scale(all_predictors()) %>% prep(training = df_lp_kanto) %>% bake(new_data = df_lp_kanto) %>% summarise(mean = mean(distance_from_station), sd = sd(distance_from_station)) %>% knitr::kable(format = "html") ``` <table> <thead> <tr> <th style="text-align:right;"> mean </th> <th style="text-align:right;"> sd </th> </tr> </thead> <tbody> <tr> <td style="text-align:right;"> 0.797 </td> <td style="text-align:right;"> 1 </td> </tr> </tbody> </table> ] --- # 標準化 (standardization) - 中心化 + スケーリング。オートスケーリングとも呼ばれる - データの分布が正規分布に従うことを仮定する - 特徴量の値を**平均0、分散1**に変換 - 元のデータが正規分布に従う場合は、標準化された値も正規分布に従う `$$\tilde{x} = \frac{x- mean(x)}{sqrt(var(x))}$$` .pull-left[ ```r # scale()が用意されている lp_dist_scaled <- scale(x, center = TRUE, scale = TRUE) mean(lp_dist_scaled) # 限りなく0に近くなる ``` ``` ## [1] 3.06e-17 ``` ```r sd(lp_dist_scaled) # 分散は1 ``` ``` ## [1] 1 ``` ] .pull-right[ ```r df_lp_kanto %>% recipe(~ distance_from_station) %>% * step_center(all_predictors()) %>% * step_scale(all_predictors()) %>% prep(training = df_lp_kanto) %>% bake(new_data = df_lp_kanto) %>% summarise(mean = mean(distance_from_station), sd = sd(distance_from_station)) %>% knitr::kable(format = "html") ``` <table> <thead> <tr> <th style="text-align:right;"> mean </th> <th style="text-align:right;"> sd </th> </tr> </thead> <tbody> <tr> <td style="text-align:right;"> 0 </td> <td style="text-align:right;"> 1 </td> </tr> </tbody> </table> ] --- # Min-Maxスケーリング - 値の範囲を0から1に収まるように調整する - 対象の変数の最小値、最大値を利用する - 外れ値の影響を受けやすい - 最小値、最大値があらかじめ決まっている場合に有効 - e.g. 画像処理におけるRGBの強さ(0~255) `$$\tilde{x} = \frac{x - min(x)}{max(x) - min(x)}$$` ```r lp_dist_minmax <- * scale(x, center = min(x), scale = (max(x) - min(x))) range(lp_dist_minmax) ``` ``` ## [1] 0 1 ``` --- # スケーリングは分布には影響しない <img src="scaling_files/figure-html/plot_scaling-1.png" style="display: block; margin: auto;" /> --- # スケーリング処理を行わない場合の問題 - 重回帰モデル、主成分分析の例を紹介 - 単位の異なる4つの変数 <table> <caption>地価データにおける「地価」、「最寄駅からの距離」「地籍」「該当する市町村の夜間人口」の要約統計量</caption> <thead> <tr> <th style="text-align:left;"> variable </th> <th style="text-align:right;"> mean </th> <th style="text-align:right;"> min </th> <th style="text-align:right;"> max </th> <th style="text-align:right;"> sd </th> <th style="text-align:left;"> unit </th> </tr> </thead> <tbody> <tr> <td style="text-align:left;"> posted_land_price </td> <td style="text-align:right;"> 415432 </td> <td style="text-align:right;"> 613 </td> <td style="text-align:right;"> 55500000 </td> <td style="text-align:right;"> 1766361 </td> <td style="text-align:left;"> 円/m2 </td> </tr> <tr> <td style="text-align:left;"> distance_from_station </td> <td style="text-align:right;"> 1566 </td> <td style="text-align:right;"> 0 </td> <td style="text-align:right;"> 24000 </td> <td style="text-align:right;"> 1965 </td> <td style="text-align:left;"> m </td> </tr> <tr> <td style="text-align:left;"> acreage </td> <td style="text-align:right;"> 751 </td> <td style="text-align:right;"> 46 </td> <td style="text-align:right;"> 413215 </td> <td style="text-align:right;"> 7247 </td> <td style="text-align:left;"> m2 </td> </tr> <tr> <td style="text-align:left;"> night_population </td> <td style="text-align:right;"> 259450 </td> <td style="text-align:right;"> 3214 </td> <td style="text-align:right;"> 903346 </td> <td style="text-align:right;"> 197976 </td> <td style="text-align:left;"> 人 </td> </tr> </tbody> </table> --- # スケーリング処理を行わない場合の問題1: 重回帰モデル - 変数間の係数の直接的な比較が困難 - 標準化回帰係数を利用する方法もある ```r mod_formula <- formula(posted_land_price ~ distance_from_station + acreage + night_population) lm(mod_formula, data = df_lp_kanto) %>% tidy() %>% knitr::kable(format = "html") ``` <table> <thead> <tr> <th style="text-align:left;"> term </th> <th style="text-align:right;"> estimate </th> <th style="text-align:right;"> std.error </th> <th style="text-align:right;"> statistic </th> <th style="text-align:right;"> p.value </th> </tr> </thead> <tbody> <tr> <td style="text-align:left;"> (Intercept) </td> <td style="text-align:right;"> 6.20e+05 </td> <td style="text-align:right;"> 3.71e+04 </td> <td style="text-align:right;"> 16.71 </td> <td style="text-align:right;"> 0.000 </td> </tr> <tr> <td style="text-align:left;"> distance_from_station </td> <td style="text-align:right;"> -1.15e+02 </td> <td style="text-align:right;"> 9.85e+00 </td> <td style="text-align:right;"> -11.72 </td> <td style="text-align:right;"> 0.000 </td> </tr> <tr> <td style="text-align:left;"> acreage </td> <td style="text-align:right;"> 3.40e+00 </td> <td style="text-align:right;"> 2.63e+00 </td> <td style="text-align:right;"> 1.29 </td> <td style="text-align:right;"> 0.195 </td> </tr> <tr> <td style="text-align:left;"> night_population </td> <td style="text-align:right;"> -1.03e-01 </td> <td style="text-align:right;"> 9.80e-02 </td> <td style="text-align:right;"> -1.05 </td> <td style="text-align:right;"> 0.293 </td> </tr> </tbody> </table> --- # スケーリング処理を行わない場合の問題1: 重回帰モデル ```r df_lp_kanto %>% recipe(mod_formula) %>% step_center(all_predictors()) %>% step_scale(all_predictors()) %>% prep() %>% juice() %>% lm(mod_formula, data = .) %>% tidy() %>% knitr::kable(format = "html") ``` <table> <thead> <tr> <th style="text-align:left;"> term </th> <th style="text-align:right;"> estimate </th> <th style="text-align:right;"> std.error </th> <th style="text-align:right;"> statistic </th> <th style="text-align:right;"> p.value </th> </tr> </thead> <tbody> <tr> <td style="text-align:left;"> (Intercept) </td> <td style="text-align:right;"> 415432 </td> <td style="text-align:right;"> 19034 </td> <td style="text-align:right;"> 21.83 </td> <td style="text-align:right;"> 0.000 </td> </tr> <tr> <td style="text-align:left;"> distance_from_station </td> <td style="text-align:right;"> -226650 </td> <td style="text-align:right;"> 19344 </td> <td style="text-align:right;"> -11.72 </td> <td style="text-align:right;"> 0.000 </td> </tr> <tr> <td style="text-align:left;"> acreage </td> <td style="text-align:right;"> 24678 </td> <td style="text-align:right;"> 19058 </td> <td style="text-align:right;"> 1.29 </td> <td style="text-align:right;"> 0.195 </td> </tr> <tr> <td style="text-align:left;"> night_population </td> <td style="text-align:right;"> -20325 </td> <td style="text-align:right;"> 19326 </td> <td style="text-align:right;"> -1.05 </td> <td style="text-align:right;"> 0.293 </td> </tr> </tbody> </table> --- # スケーリング処理を行わない場合の問題2: 主成分分析 - 主成分分析はスケール不変性を持たない - 異なる単位の変数を入力に与えると大きな値の入った変数の影響が強くなる - 🦉 `prcomp()` では標準化するためのオプションが用意されているが、歴史的な経緯により引数`scale.`が規定値では`FALSE`なのに注意 ⚠️ .pull-left[ ```r # デフォルトの挙動 pca_res <- prcomp(~ distance_from_station + acreage + night_population, data = df_lp_kanto, * center = TRUE, * scale. = FALSE) # 主成分軸上のSDが大きく異なっていることに注意(単位の影響を強く受けている) pca_res ``` ``` ## Standard deviations (1, .., p=3): ## [1] 197976 7246 1933 ## ## Rotation (n x k) = (3 x 3): ## PC1 PC2 PC3 ## distance_from_station -0.001712 0.01266 -0.9999 ## acreage -0.000739 0.99992 0.0127 ## night_population 0.999998 0.00076 -0.0017 ``` ] .pull-right[ ```r # 第1主成分のみで累積寄与率が99%を超える summary(pca_res) ``` ``` ## Importance of components: ## PC1 PC2 PC3 ## Standard deviation 1.98e+05 7.25e+03 1.93e+03 ## Proportion of Variance 9.99e-01 1.34e-03 1.00e-04 ## Cumulative Proportion 9.99e-01 1.00e+00 1.00e+00 ``` ] --- # スケーリング処理を行わない場合の問題2: 主成分分析 .pull-left[ ```r pca_res_scaled <- prcomp(~ distance_from_station + acreage + night_population, data = df_lp_kanto, * scale. = TRUE) # SDの値が変更 pca_res_scaled ``` ``` ## Standard deviations (1, .., p=3): ## [1] 1.088 0.995 0.909 ## ## Rotation (n x k) = (3 x 3): ## PC1 PC2 PC3 ## distance_from_station -0.694 0.0974 0.713 ## acreage -0.250 -0.9619 -0.112 ## night_population 0.675 -0.2555 0.692 ``` ] .pull-right[ ```r # 第2主成分を含めた状態で累積寄与率72% summary(pca_res_scaled) ``` ``` ## Importance of components: ## PC1 PC2 PC3 ## Standard deviation 1.088 0.995 0.909 ## Proportion of Variance 0.395 0.330 0.275 ## Cumulative Proportion 0.395 0.725 1.000 ``` ] --- # スケーリング処理を行わない場合の問題2: 主成分分析 - 主成分得点もスケーリング処理の有無により異なる .pull-left[ ```r head(pca_res$x) %>% knitr::kable(format = "html") ``` <table> <thead> <tr> <th style="text-align:right;"> PC1 </th> <th style="text-align:right;"> PC2 </th> <th style="text-align:right;"> PC3 </th> </tr> </thead> <tbody> <tr> <td style="text-align:right;"> -249682 </td> <td style="text-align:right;"> -533 </td> <td style="text-align:right;"> -6714 </td> </tr> <tr> <td style="text-align:right;"> -252951 </td> <td style="text-align:right;"> -632 </td> <td style="text-align:right;"> -11010 </td> </tr> <tr> <td style="text-align:right;"> -252951 </td> <td style="text-align:right;"> -572 </td> <td style="text-align:right;"> -11010 </td> </tr> <tr> <td style="text-align:right;"> -253920 </td> <td style="text-align:right;"> -620 </td> <td style="text-align:right;"> -3508 </td> </tr> <tr> <td style="text-align:right;"> -253911 </td> <td style="text-align:right;"> -606 </td> <td style="text-align:right;"> 1913 </td> </tr> <tr> <td style="text-align:right;"> -252953 </td> <td style="text-align:right;"> -613 </td> <td style="text-align:right;"> -12010 </td> </tr> </tbody> </table> ] .pull-right[ ```r df_lp_kanto %>% recipe(~ distance_from_station + acreage + night_population) %>% step_center(all_predictors()) %>% step_scale(all_predictors()) %>% step_pca(all_predictors()) %>% prep() %>% juice() %>% head() %>% knitr::kable(format = "html") ``` <table> <thead> <tr> <th style="text-align:right;"> PC1 </th> <th style="text-align:right;"> PC2 </th> <th style="text-align:right;"> PC3 </th> </tr> </thead> <tbody> <tr> <td style="text-align:right;"> -3.357 </td> <td style="text-align:right;"> 0.734 </td> <td style="text-align:right;"> 1.725 </td> </tr> <tr> <td style="text-align:right;"> -4.881 </td> <td style="text-align:right;"> 0.971 </td> <td style="text-align:right;"> 3.277 </td> </tr> <tr> <td style="text-align:right;"> -4.883 </td> <td style="text-align:right;"> 0.963 </td> <td style="text-align:right;"> 3.276 </td> </tr> <tr> <td style="text-align:right;"> -2.239 </td> <td style="text-align:right;"> 0.586 </td> <td style="text-align:right;"> 0.548 </td> </tr> <tr> <td style="text-align:right;"> -0.328 </td> <td style="text-align:right;"> 0.306 </td> <td style="text-align:right;"> -1.421 </td> </tr> <tr> <td style="text-align:right;"> -5.235 </td> <td style="text-align:right;"> 1.020 </td> <td style="text-align:right;"> 3.640 </td> </tr> </tbody> </table> ] --- # Session info .scroll-output[ ``` ## ─ Session info ────────────────────────────────────────────────────────── ## setting value ## version R version 3.6.0 (2019-04-26) ## os Debian GNU/Linux 9 (stretch) ## system x86_64, linux-gnu ## ui X11 ## language (EN) ## collate en_US.UTF-8 ## ctype en_US.UTF-8 ## tz Etc/UTC ## date 2019-06-30 ## ## ─ Packages ────────────────────────────────────────────────────────────── ## package * version date lib ## assertr 2.6 2019-01-22 [1] ## assertthat 0.2.1 2019-03-21 [1] ## backports 1.1.4 2019-04-10 [1] ## base64enc 0.1-3 2015-07-28 [1] ## bayesplot 1.7.0 2019-05-23 [1] ## boot 1.3-22 2019-04-02 [2] ## broom * 0.5.2 2019-04-07 [1] ## callr 3.2.0 2019-03-15 [1] ## cellranger 1.1.0 2016-07-27 [1] ## class 7.3-15 2019-01-01 [2] ## cli 1.1.0 2019-03-19 [1] ## codetools 0.2-16 2018-12-24 [2] ## colorspace 1.4-1 2019-03-18 [1] ## colourpicker 1.0 2017-09-27 [1] ## conflicted * 1.0.4 2019-06-21 [1] ## cowplot 0.9.4 2019-01-08 [1] ## crayon 1.3.4 2017-09-16 [1] ## crosstalk 1.0.0 2016-12-21 [1] ## dials * 0.0.2 2018-12-09 [1] ## digest 0.6.19 2019-05-20 [1] ## dplyr * 0.8.1 2019-05-14 [1] ## DT 0.7 2019-06-11 [1] ## dygraphs 1.1.1.6 2018-07-11 [1] ## emo 0.0.0.9000 2019-06-29 [1] ## evaluate 0.14 2019-05-28 [1] ## forcats * 0.4.0 2019-02-17 [1] ## generics 0.0.2 2018-11-29 [1] ## ggplot2 * 3.2.0 2019-06-16 [1] ## ggridges 0.5.1 2018-09-27 [1] ## glue 1.3.1.9000 2019-06-29 [1] ## gower 0.2.1 2019-05-14 [1] ## gridExtra 2.3 2017-09-09 [1] ## gtable 0.3.0 2019-03-25 [1] ## gtools 3.8.1 2018-06-26 [1] ## haven 2.1.0 2019-02-19 [1] ## here 0.1 2017-05-28 [1] ## highr 0.8 2019-03-20 [1] ## hms 0.4.2 2018-03-10 [1] ## htmltools 0.3.6 2017-04-28 [1] ## htmlwidgets 1.3 2018-09-30 [1] ## httpuv 1.5.1 2019-04-05 [1] ## httr 1.4.0 2018-12-11 [1] ## icon 0.1.0 2019-06-29 [1] ## igraph 1.2.4.1 2019-04-22 [1] ## infer * 0.4.0.1 2019-04-22 [1] ## inline 0.3.15 2018-05-18 [1] ## ipred 0.9-9 2019-04-28 [1] ## janeaustenr 0.1.5 2017-06-10 [1] ## jsonlite 1.6 2018-12-07 [1] ## knitr 1.23 2019-05-18 [1] ## labeling 0.3 2014-08-23 [1] ## later 0.8.0 2019-02-11 [1] ## lattice 0.20-38 2018-11-04 [2] ## lava 1.6.5 2019-02-12 [1] ## lazyeval 0.2.2 2019-03-15 [1] ## lme4 1.1-21 2019-03-05 [1] ## loo 2.1.0 2019-03-13 [1] ## lubridate 1.7.4 2018-04-11 [1] ## magrittr 1.5 2014-11-22 [1] ## markdown 1.0 2019-06-07 [1] ## MASS 7.3-51.4 2019-03-31 [2] ## Matrix 1.2-17 2019-03-22 [2] ## matrixStats 0.54.0 2018-07-23 [1] ## memoise 1.1.0 2017-04-21 [1] ## mime 0.7 2019-06-11 [1] ## miniUI 0.1.1.1 2018-05-18 [1] ## minqa 1.2.4 2014-10-09 [1] ## modelr 0.1.4 2019-02-18 [1] ## munsell 0.5.0 2018-06-12 [1] ## nlme 3.1-139 2019-04-09 [2] ## nloptr 1.2.1 2018-10-03 [1] ## nnet 7.3-12 2016-02-02 [2] ## parsnip * 0.0.2 2019-03-22 [1] ## pillar 1.4.1 2019-05-28 [1] ## pkgbuild 1.0.3 2019-03-20 [1] ## pkgconfig 2.0.2 2018-08-16 [1] ## plyr 1.8.4 2016-06-08 [1] ## prettyunits 1.0.2 2015-07-13 [1] ## pROC 1.15.0 2019-06-01 [1] ## processx 3.3.1 2019-05-08 [1] ## prodlim 2018.04.18 2018-04-18 [1] ## promises 1.0.1 2018-04-13 [1] ## ps 1.3.0 2018-12-21 [1] ## purrr * 0.3.2 2019-03-15 [1] ## R6 2.4.0 2019-02-14 [1] ## Rcpp 1.0.1 2019-03-17 [1] ## readr * 1.3.1 2018-12-21 [1] ## readxl 1.3.1 2019-03-13 [1] ## recipes * 0.1.5 2019-03-21 [1] ## reshape2 1.4.3 2017-12-11 [1] ## rlang 0.4.0.9000 2019-06-29 [1] ## rmarkdown 1.13 2019-05-22 [1] ## rpart 4.1-15 2019-04-12 [2] ## rprojroot 1.3-2 2018-01-03 [1] ## rsample * 0.0.4 2019-01-07 [1] ## rsconnect 0.8.13 2019-01-10 [1] ## rstan 2.18.2 2018-11-07 [1] ## rstanarm 2.18.2 2018-11-10 [1] ## rstantools 1.5.1 2018-08-22 [1] ## rstudioapi 0.10 2019-03-19 [1] ## rvest 0.3.4 2019-05-15 [1] ## scales * 1.0.0 2018-08-09 [1] ## sessioninfo 1.1.1 2018-11-05 [1] ## shiny 1.3.2 2019-04-22 [1] ## shinyjs 1.0 2018-01-08 [1] ## shinystan 2.5.0 2018-05-01 [1] ## shinythemes 1.1.2 2018-11-06 [1] ## SnowballC 0.6.0 2019-01-15 [1] ## StanHeaders 2.18.1-10 2019-06-14 [1] ## stringi 1.4.3 2019-03-12 [1] ## stringr * 1.4.0 2019-02-10 [1] ## survival 2.44-1.1 2019-04-01 [2] ## threejs 0.3.1 2017-08-13 [1] ## tibble * 2.1.3 2019-06-06 [1] ## tidymodels * 0.0.2 2018-11-27 [1] ## tidyposterior 0.0.2 2018-11-15 [1] ## tidypredict 0.3.0 2019-01-10 [1] ## tidyr * 0.8.3.9000 2019-06-29 [1] ## tidyselect 0.2.5 2018-10-11 [1] ## tidytext 0.2.1 2019-06-14 [1] ## tidyverse * 1.2.1 2017-11-14 [1] ## timeDate 3043.102 2018-02-21 [1] ## tokenizers 0.2.1 2018-03-29 [1] ## vctrs 0.1.99.9000 2019-06-29 [1] ## withr 2.1.2 2018-03-15 [1] ## xaringan 0.10 2019-05-14 [1] ## xfun 0.7 2019-05-14 [1] ## xml2 1.2.0 2018-01-24 [1] ## xtable 1.8-4 2019-04-21 [1] ## xts 0.11-2 2018-11-05 [1] ## yaml 2.2.0 2018-07-25 [1] ## yardstick * 0.0.3 2019-03-08 [1] ## zeallot 0.1.0 2018-01-28 [1] ## zoo 1.8-6 2019-05-28 [1] ## source ## CRAN (R 3.6.0) ## CRAN (R 3.6.0) ## CRAN (R 3.6.0) ## CRAN (R 3.6.0) ## CRAN (R 3.6.0) ## CRAN (R 3.6.0) ## CRAN (R 3.6.0) ## CRAN (R 3.6.0) ## CRAN (R 3.6.0) ## CRAN (R 3.6.0) ## CRAN (R 3.6.0) ## CRAN (R 3.6.0) ## CRAN (R 3.6.0) ## CRAN (R 3.6.0) ## CRAN (R 3.6.0) ## CRAN (R 3.6.0) ## CRAN (R 3.6.0) ## CRAN (R 3.6.0) ## CRAN (R 3.6.0) ## CRAN (R 3.6.0) ## CRAN (R 3.6.0) ## CRAN (R 3.6.0) ## CRAN (R 3.6.0) ## Github (hadley/emo@02a5206) ## CRAN (R 3.6.0) ## CRAN (R 3.6.0) ## CRAN (R 3.6.0) ## CRAN (R 3.6.0) ## CRAN (R 3.6.0) ## Github (tidyverse/glue@ea0edcb) ## CRAN (R 3.6.0) ## CRAN (R 3.6.0) ## CRAN (R 3.6.0) ## CRAN (R 3.6.0) ## CRAN (R 3.6.0) ## CRAN (R 3.6.0) ## CRAN (R 3.6.0) ## CRAN (R 3.6.0) ## CRAN (R 3.6.0) ## CRAN (R 3.6.0) ## CRAN (R 3.6.0) ## CRAN (R 3.6.0) ## Github (ropenscilabs/icon@a510f88) ## CRAN (R 3.6.0) ## CRAN (R 3.6.0) ## CRAN (R 3.6.0) ## CRAN (R 3.6.0) ## CRAN (R 3.6.0) ## CRAN (R 3.6.0) ## CRAN (R 3.6.0) ## CRAN (R 3.6.0) ## CRAN (R 3.6.0) ## CRAN (R 3.6.0) ## CRAN (R 3.6.0) ## CRAN (R 3.6.0) ## CRAN (R 3.6.0) ## CRAN (R 3.6.0) ## CRAN (R 3.6.0) ## CRAN (R 3.6.0) ## CRAN (R 3.6.0) ## CRAN (R 3.6.0) ## CRAN (R 3.6.0) ## CRAN (R 3.6.0) ## CRAN (R 3.6.0) ## CRAN (R 3.6.0) ## CRAN (R 3.6.0) ## CRAN (R 3.6.0) ## CRAN (R 3.6.0) ## CRAN (R 3.6.0) ## CRAN (R 3.6.0) ## CRAN (R 3.6.0) ## CRAN (R 3.6.0) ## CRAN (R 3.6.0) ## CRAN (R 3.6.0) ## CRAN (R 3.6.0) ## CRAN (R 3.6.0) ## CRAN (R 3.6.0) ## CRAN (R 3.6.0) ## CRAN (R 3.6.0) ## CRAN (R 3.6.0) ## CRAN (R 3.6.0) ## CRAN (R 3.6.0) ## CRAN (R 3.6.0) ## CRAN (R 3.6.0) ## CRAN (R 3.6.0) ## CRAN (R 3.6.0) ## CRAN (R 3.6.0) ## CRAN (R 3.6.0) ## CRAN (R 3.6.0) ## CRAN (R 3.6.0) ## Github (r-lib/rlang@fc1aae2) ## CRAN (R 3.6.0) ## CRAN (R 3.6.0) ## CRAN (R 3.6.0) ## CRAN (R 3.6.0) ## CRAN (R 3.6.0) ## CRAN (R 3.6.0) ## CRAN (R 3.6.0) ## CRAN (R 3.6.0) ## CRAN (R 3.6.0) ## CRAN (R 3.6.0) ## CRAN (R 3.6.0) ## CRAN (R 3.6.0) ## CRAN (R 3.6.0) ## CRAN (R 3.6.0) ## CRAN (R 3.6.0) ## CRAN (R 3.6.0) ## CRAN (R 3.6.0) ## CRAN (R 3.6.0) ## CRAN (R 3.6.0) ## CRAN (R 3.6.0) ## CRAN (R 3.6.0) ## CRAN (R 3.6.0) ## CRAN (R 3.6.0) ## CRAN (R 3.6.0) ## CRAN (R 3.6.0) ## CRAN (R 3.6.0) ## Github (tidyverse/tidyr@158f8b4) ## CRAN (R 3.6.0) ## CRAN (R 3.6.0) ## CRAN (R 3.6.0) ## CRAN (R 3.6.0) ## CRAN (R 3.6.0) ## Github (r-lib/vctrs@4c0e04a) ## CRAN (R 3.6.0) ## CRAN (R 3.6.0) ## CRAN (R 3.6.0) ## CRAN (R 3.6.0) ## CRAN (R 3.6.0) ## CRAN (R 3.6.0) ## CRAN (R 3.6.0) ## CRAN (R 3.6.0) ## CRAN (R 3.6.0) ## CRAN (R 3.6.0) ## ## [1] /usr/local/lib/R/site-library ## [2] /usr/local/lib/R/library ``` ]