baseRの関数メモ。.Rprofileでの処理や、教科書・他の人のコードを読むのに必要なので詰まったものをメモしていく。出来るだけtidyverse的に処理したいのでtidyverse的に置き換えられるものはその方法もメモ。機能的な差異もできるだけ記載しておく。

文字列の扱い関連

paste0 / paste から str_c

RPubs - Stringr-Stringi-base

base::paste0(..., collapse = NULL) base::paste(..., sep = " ", collapse = NULL) stringr::str_c(..., sep = "", collapse = NULL)

NAの扱いの違い

# pasteはas.character処理をするのでNAの扱いも文字列になる
x <- LETTERS 
x[x %in% c("A", "E", "I", "O", "U")] <- NA
x %>% head()
## [1] NA  "B" "C" "D" NA  "F"
y <- letters
y[c(TRUE, FALSE, FALSE)] <- NA
y %>% head()
## [1] NA  "b" "c" NA  "e" "f"
stringr::str_c(x, y) %>% head()
## [1] NA   "Bb" "Cc" NA   NA   "Ff"
paste0(x, y) %>% head()
## [1] "NANA" "Bb"   "Cc"   "DNA"  "NAe"  "Ff"
# NAを文字列として扱いたければ str_replace_na
stringr::str_c(str_replace_na(x), str_replace_na(y)) %>% head()
## [1] "NANA" "Bb"   "Cc"   "DNA"  "NAe"  "Ff"

ベクトルリサイクリングの警告

str_c()はベクトルの長さがちょうど倍数になっていない場合には警告してくれる。

paste0(month.abb, letters)
##  [1] "Jana" "Febb" "Marc" "Aprd" "Maye" "Junf" "Julg" "Augh" "Sepi" "Octj"
## [11] "Novk" "Decl" "Janm" "Febn" "Maro" "Aprp" "Mayq" "Junr" "Juls" "Augt"
## [21] "Sepu" "Octv" "Novw" "Decx" "Jany" "Febz"
stringr::str_c(month.abb, letters)
## Warning in stri_c(..., sep = sep, collapse = collapse, ignore_null = TRUE):
## longer object length is not a multiple of shorter object length
##  [1] "Jana" "Febb" "Marc" "Aprd" "Maye" "Junf" "Julg" "Augh" "Sepi" "Octj"
## [11] "Novk" "Decl" "Janm" "Febn" "Maro" "Aprp" "Mayq" "Junr" "Juls" "Augt"
## [21] "Sepu" "Octv" "Novw" "Decx" "Jany" "Febz"

sprintfからstringr::str_interpstringr::str_glue

printfの文法

詳しくは?sprintf()

  • %d 整数として出力.
  • %05d 5ケタの整数として出力.5ケタより短いときは頭を 0 で埋める. %f, 小数点付きで出力. %.3f, 小数点以下3ケタまで出力. %s, 文字列として出力. タブ , 改行 書式指定でない文字,そのまま出力.

ファイルオペレーション関連

主にfsで置き換える形になる。ただし.Rprofileなどでは必要になる。

file.exists()からfs::file_exists()

file.path()からfs::path()

ifelse()からdplyr::if_else()

通常のif, elseの組み合わせと違ってベクトル化されているらしく、また標準のifelse()より厳密で、ただしベクトルを受け取った時の返り値が特殊らしく、注意が必要とのこと。速度的には最高の方法ではないが通常のforループなどよりは早い模様。

与えられた値が欠損値NAの場合でも「missing」引数を設定しておくことで欠損値用の特定の処理を行うことができる。