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 functionisFALSE()
defined analogously toisTRUE()
.
そもそもisTRUE
を使っていなかったので確認。
厳密に真偽判断したいときに使う。
body(isTRUE)
## is.logical(x) && length(x) == 1L && !is.na(x) && x
body(isFALSE)
## is.logical(x) && length(x) == 1L && !is.na(x) && !x
これらはいずれもTRUE
だが
if(5) print("TRUE") else print("FALSE")
## [1] "TRUE"
if(1) print("TRUE") else print("FALSE")
## [1] "TRUE"
if(1:5) print("TRUE") else print("FALSE")
## 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"
isTRUE
を通すといずれもFALSE
if(isTRUE(5)) print("TRUE") else print("FALSE")
## [1] "FALSE"
if(isTRUE(1)) print("TRUE") else print("FALSE")
## [1] "FALSE"
if(isTRUE(1:5)) print("TRUE") else print("FALSE")
## [1] "FALSE"
length(x) != 1
でFALSE
を返すので、癖が強い気がする。
例えばこれはFALSE
。
if(isTRUE(c(T, T))) print("TRUE") else print("FALSE")
## [1] "FALSE"
if(isFALSE(c(F, F))) print("TRUE") else print("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 duplicatedlabels
(not duplicatedlevels
!). Hence you can map different values ofx
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"))
## [1] "2018-04-25 12:34:56 UTC"
time_now %>% class
## [1] "POSIXlt" "POSIXt"
time_now %>% round("year")
## [1] "2018-01-01 UTC"
time_now %>% round("month")
## [1] "2018-05-01 UTC"
time_now %>% round("day")
## [1] "2018-04-26 UTC"
{lubridate}
だとRounding Up Date Objects。
lubridate::round_date(time_now, unit = "2 hours")
## [1] "2018-04-25 12:00:00 UTC"
lubridate::ceiling_date(time_now, unit = "5 mins")
## [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 -------------------------------------------------------------
## 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-04-26
## Packages -----------------------------------------------------------------
## package * version date source
## assertthat 0.2.0 2017-04-11 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)
## 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)
## 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)
## 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)
## xml2 1.2.0 2018-01-24 CRAN (R 3.5.0)