baseRの関数メモ。.Rprofile
での処理や、教科書・他の人のコードを読むのに必要なので詰まったものをメモしていく。出来るだけtidyverse的に処理したいのでtidyverse的に置き換えられるものはその方法もメモ。機能的な差異もできるだけ記載しておく。
paste0
/ paste
から str_c
base::paste0(..., collapse = NULL)
base::paste(..., sep = " ", collapse = NULL)
stringr::str_c(..., sep = "", collapse = NULL)
# 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_interp
・stringr::str_glue
printf
の文法詳しくは?sprintf()
%d
整数として出力.%05d
5ケタの整数として出力.5ケタより短いときは頭を 0 で埋める. %f, 小数点付きで出力. %.3f, 小数点以下3ケタまで出力. %s, 文字列として出力. タブ , 改行 書式指定でない文字,そのまま出力.主にfsで置き換える形になる。ただし.Rprofile
などでは必要になる。
通常のif, elseの組み合わせと違ってベクトル化されているらしく、また標準のifelse()より厳密で、ただしベクトルを受け取った時の返り値が特殊らしく、注意が必要とのこと。速度的には最高の方法ではないが通常のforループなどよりは早い模様。
与えられた値が欠損値NAの場合でも「missing」引数を設定しておくことで欠損値用の特定の処理を行うことができる。