3 min read

Rまわりのアップデート (ver. 3.5.0)

投稿論文など、色々と一段落したのでR環境を整備する。 Rを3.3.1 (Bug in Your Hair)から3.5.0 (Joy in Playing)まで、Rstudioを1.0.143から1.1.447までアップデート。

R3.5.0のメジャーな変更点から気になったものを抜粋。


isTRUE() is more tolerant and now true in
x <- rlnorm(99)
isTRUE(median(x) == quantile(x)["50%"])
New function isFALSE() defined analogously to isTRUE().

そもそもisTRUEを使っていなかったので確認。 厳密に真偽判断したいときに使う。

body(isTRUE)
body(isFALSE)
## is.logical(x) && length(x) == 1L && !is.na(x) && x
## is.logical(x) && length(x) == 1L && !is.na(x) && !x

これらはいずれもTRUEだが

if(5) print("TRUE") else print("FALSE")
if(1) print("TRUE") else print("FALSE")
if(1:5) print("TRUE") else print("FALSE") # with warning
## Warning in if (1:5) print("TRUE") else print("FALSE"): the condition has
## length > 1 and only the first element will be used
## [1] "TRUE"
## [1] "TRUE"
## [1] "TRUE"

isTRUEを通すといずれもFALSE

if(isTRUE(5)) print("TRUE") else print("FALSE")
if(isTRUE(1)) print("TRUE") else print("FALSE")
if(isTRUE(1:5)) print("TRUE") else print("FALSE")
## [1] "FALSE"
## [1] "FALSE"
## [1] "FALSE"

length(x) != 1FALSEを返すので、癖が強い気がする。 例えばこれはFALSE

if(isTRUE(c(T, T))) print("TRUE") else print("FALSE")
if(isFALSE(c(F, F))) print("TRUE") else print("FALSE")
## [1] "FALSE"
## [1] "FALSE"

dplyr内では使わないようにする。

data.frame(x = 1:5, y = 5:1) %>%
  dplyr::mutate(x_is_y = isTRUE(x == y),
                x_is_not_y = isFALSE(x == y))
##   x y x_is_y x_is_not_y
## 1 1 5  FALSE      FALSE
## 2 2 4  FALSE      FALSE
## 3 3 3  FALSE      FALSE
## 4 4 2  FALSE      FALSE
## 5 5 1  FALSE      FALSE

factor(x, levels, labels) now allows duplicated labels (not duplicated levels!). Hence you can map different values of x to the same level directly.

factor型はggplotのラベル順番コントロールくらいにしか使っていないので、得られる恩恵はあまりなさそう。 とりまわしのよさそうな{forecat}を勉強する必要がある。


POSIXt objects can now also be rounded or truncated to month or year.

POSIXtの丸め・切り捨てに対応。

(time_now <- as.POSIXlt("2018-04-25 12:34:56", tz = "UTC"))

time_now %>% class
  
time_now %>% round("year")
time_now %>% round("month")
time_now %>% round("day")
## [1] "2018-04-25 12:34:56 UTC"
## [1] "POSIXlt" "POSIXt" 
## [1] "2018-01-01 UTC"
## [1] "2018-05-01 UTC"
## [1] "2018-04-26 UTC"

{lubridate}だとRounding Up Date Objects

lubridate::round_date(time_now, unit = "2 hours")
lubridate::ceiling_date(time_now, unit = "5 mins")
## [1] "2018-04-25 12:00:00 UTC"
## [1] "2018-04-25 12:35:00 UTC"

5分刻み丸めができることをいまさら知った。 unit部分の指定はlubridate:::parse_period_unit内の正規表現 (regexpr(" *(?<n>[0-9.,]+)? *(?<unit>[^ \t\n]+)", unit[[1]], perl = T)) にマッチするように書けばOK。

どっちかというと、roundよりもむしろ 15:20:00 -> 15.333.. な関数がほしい (例SO)。 すぐ書けるので毎回関数を組んでしまう。 時刻を数字に変換するのは統計解析のときに問題を起こしうる気がするので、あえて組んでいないのかもしれない。

devtools::session_info()
## Session info -------------------------------------------------------------
## Packages -----------------------------------------------------------------
##  setting  value                       
##  version  R version 3.5.0 (2018-04-23)
##  system   x86_64, darwin15.6.0        
##  ui       X11                         
##  language (EN)                        
##  collate  en_US.UTF-8                 
##  tz       Asia/Tokyo                  
##  date     2018-05-05                  
## 
##  package    * version date       source        
##  assertthat   0.2.0   2017-04-11 CRAN (R 3.5.0)
##  backports    1.1.2   2017-12-13 CRAN (R 3.5.0)
##  base       * 3.5.0   2018-04-24 local         
##  bindr        0.1.1   2018-03-13 CRAN (R 3.5.0)
##  bindrcpp   * 0.2.2   2018-03-29 CRAN (R 3.5.0)
##  blogdown     0.6     2018-04-18 CRAN (R 3.5.0)
##  bookdown     0.7     2018-02-18 CRAN (R 3.5.0)
##  broom        0.4.4   2018-03-29 CRAN (R 3.5.0)
##  cellranger   1.1.0   2016-07-27 CRAN (R 3.5.0)
##  cli          1.0.0   2017-11-05 CRAN (R 3.5.0)
##  colorspace   1.3-2   2016-12-14 CRAN (R 3.5.0)
##  compiler     3.5.0   2018-04-24 local         
##  crayon       1.3.4   2017-09-16 CRAN (R 3.5.0)
##  datasets   * 3.5.0   2018-04-24 local         
##  devtools     1.13.5  2018-02-18 CRAN (R 3.5.0)
##  digest       0.6.15  2018-01-28 CRAN (R 3.5.0)
##  dplyr      * 0.7.4   2017-09-28 CRAN (R 3.5.0)
##  evaluate     0.10.1  2017-06-24 CRAN (R 3.5.0)
##  forcats    * 0.3.0   2018-02-19 CRAN (R 3.5.0)
##  foreign      0.8-70  2017-11-28 CRAN (R 3.5.0)
##  ggplot2    * 2.2.1   2016-12-30 CRAN (R 3.5.0)
##  glue         1.2.0   2017-10-29 CRAN (R 3.5.0)
##  graphics   * 3.5.0   2018-04-24 local         
##  grDevices  * 3.5.0   2018-04-24 local         
##  grid         3.5.0   2018-04-24 local         
##  gtable       0.2.0   2016-02-26 CRAN (R 3.5.0)
##  haven        1.1.1   2018-01-18 CRAN (R 3.5.0)
##  hms          0.4.2   2018-03-10 CRAN (R 3.5.0)
##  htmltools    0.3.6   2017-04-28 CRAN (R 3.5.0)
##  httr         1.3.1   2017-08-20 CRAN (R 3.5.0)
##  jsonlite     1.5     2017-06-01 CRAN (R 3.5.0)
##  knitr        1.20    2018-02-20 CRAN (R 3.5.0)
##  lattice      0.20-35 2017-03-25 CRAN (R 3.5.0)
##  lazyeval     0.2.1   2017-10-29 CRAN (R 3.5.0)
##  lubridate    1.7.4   2018-04-11 CRAN (R 3.5.0)
##  magrittr     1.5     2014-11-22 CRAN (R 3.5.0)
##  memoise      1.1.0   2017-04-21 CRAN (R 3.5.0)
##  methods    * 3.5.0   2018-04-24 local         
##  mnormt       1.5-5   2016-10-15 CRAN (R 3.5.0)
##  modelr       0.1.1   2017-07-24 CRAN (R 3.5.0)
##  munsell      0.4.3   2016-02-13 CRAN (R 3.5.0)
##  nlme         3.1-137 2018-04-07 CRAN (R 3.5.0)
##  parallel     3.5.0   2018-04-24 local         
##  pillar       1.2.1   2018-02-27 CRAN (R 3.5.0)
##  pkgconfig    2.0.1   2017-03-21 CRAN (R 3.5.0)
##  plyr         1.8.4   2016-06-08 CRAN (R 3.5.0)
##  psych        1.8.3.3 2018-03-30 CRAN (R 3.5.0)
##  purrr      * 0.2.4   2017-10-18 CRAN (R 3.5.0)
##  R6           2.2.2   2017-06-17 CRAN (R 3.5.0)
##  Rcpp         0.12.16 2018-03-13 CRAN (R 3.5.0)
##  readr      * 1.1.1   2017-05-16 CRAN (R 3.5.0)
##  readxl       1.1.0   2018-04-20 CRAN (R 3.5.0)
##  reshape2     1.4.3   2017-12-11 CRAN (R 3.5.0)
##  rlang        0.2.0   2018-02-20 CRAN (R 3.5.0)
##  rmarkdown    1.9     2018-03-01 CRAN (R 3.5.0)
##  rprojroot    1.3-2   2018-01-03 CRAN (R 3.5.0)
##  rstudioapi   0.7     2017-09-07 CRAN (R 3.5.0)
##  rvest        0.3.2   2016-06-17 CRAN (R 3.5.0)
##  scales       0.5.0   2017-08-24 CRAN (R 3.5.0)
##  stats      * 3.5.0   2018-04-24 local         
##  stringi      1.1.7   2018-03-12 CRAN (R 3.5.0)
##  stringr    * 1.3.0   2018-02-19 CRAN (R 3.5.0)
##  tibble     * 1.4.2   2018-01-22 CRAN (R 3.5.0)
##  tidyr      * 0.8.0   2018-01-29 CRAN (R 3.5.0)
##  tidyverse  * 1.2.1   2017-11-14 CRAN (R 3.5.0)
##  tools        3.5.0   2018-04-24 local         
##  utils      * 3.5.0   2018-04-24 local         
##  withr        2.1.2   2018-03-15 CRAN (R 3.5.0)
##  xfun         0.1     2018-01-22 CRAN (R 3.5.0)
##  xml2         1.2.0   2018-01-24 CRAN (R 3.5.0)
##  yaml         2.1.18  2018-03-08 CRAN (R 3.5.0)