R言語ではデータを格納する独自形式として、「.RDS」と「.RData」の2つがあり、
形式 | 格納オブジェクト | 特徴 |
---|---|---|
.RDS | 1個のRオブジェクトを格納 | 再現性の高いコードを書くには推奨される。読み込み時にオブジェクト名を指定できる/しなくてはいけない |
.RData | 複数のRオブジェクトを格納 | 読み込みなどは楽だが、中身が何なのかわかりにくく、格納しているオブジェクトの名前を忘れると面倒。 |
という特徴がある。RStudioの本では「.RDS
」の使用が推奨されている。「.RData
」が自動で保存されないようにaliasやRStudioを設定しておく。
Rファイルとして保存することで、ファイルが自動で圧縮され、R関連のメタデータがオブジェクトとともに保存されることになる。特にデータがファクタ、日付・時刻情報、クラス属性などを持つ場合に有効。
base
関数からreadr
へsaveRDS
、readRDS
の代わりにreadrの関数を使用する方針に。
readr::read_rds(path)
readr::write_rds(x, path, compress = c("none", "gz", "bz2", "xz"), ...)
書き込み(保存)は「「saveRDS
」readr::write_rds
」を使用する。ディスクスペースの問題が以前より少ないため、デフォルトでは圧縮しないようになっている。 オブジェクト「x」を「data」フォルダ内の「x.rds」に保存したければ以下のように記載(混乱を避けるためにオブジェクト名とファイル名は一致させておく方が良さそう)
readr::write_rds(x, "data/x.rds")
読み込みは「「readRDS
」readr::read_rds
」を使用する。
poker <- readr::read_rds("pocker.RDS")
オブジェクトをロードする時に名前をつけるため、たまたま同じ名前をつけていたRオブジェクトを上書きする心配もない。
readr
による読み込みR言語でexcelファイルを読み込むためのパッケージ。tidyverseの一部のため原則としてこれを用いる。
readxl 1.0の解説 http://uribo.hatenablog.com/entry/2017/05/04/122524
Cell and Column Types • readxl
tidyverseをインストールしてあれば同時にインストールされている。
readxl::read_excel(path, sheet=1, col_names=TRUE, col_types=NULL, na='', skip=0)
手動での指定が可能。col_types
で指定できるのは"skip"
, "logical"
, "numeric"
, "date"
, "text"
, "list"
になり、整数値などはここでは指定できない。読み込んだ後に適宜readr::parse_*
系の関数でdplyr::mutate()
していく感じになる。
Cell and Column Types • readxl
にもあるが、先にエクセルファイルの列名データだけ取り出し、適宜場合分け処理してcol_types
に読み込ませるタイプ指定用の文字列ベクトルを作っておくのが良さそう。
# エクセルファイルから列名を取得
nms <- readxl::read_excel(path = "対象エクセルファイル", skip = 0, n_max = 0) %>%
names()
# 文字列にしたい列用のベクトル設定
ct_chr <- c("ID", "Compli", "...")
# ファクターにしたい列用のベクトル設定
ct_factor <- c("ASAPS", "Sex", "...")
# 整数値にしたい列用のベクトル設定
ct_int <- c("Age", "EBL", "Urine", "...")
# 論理値にしたい列用のベクトル設定
ct_log <- c("...", "...")
# set column type
# あとでparseする都合上、文字列にしたい列、整数値にしたい列、ファクターにしたい列はいずれも"text"で指定
column_types <- dplyr::case_when(nms %in% ct_chr ~ "text",
nms %in% ct_int ~ "text",
nms %in% ct_factor ~ "text",
nms %in% ct_log ~ "logical",
TRUE ~ "numeric")
# 実際に読み込み
# suppressWarningsは下記自動推定に関するWarningを抑制するため
d <- suppressWarnings(readxl::read_excel(path = "対象エクセルファイル",
col_types = column_types, # 上記で設定した文字列ベクトルを指定
col_names = nms, # 必要ならこれも変えておける
skip = 1, # 列名指定したなら
n_max = 55)) %>%
# ファクターは結局orderedにしたかったりレベル指定が必要なら個別に設定することになる。
dplyr::mutate(ASAPS = readr::parse_factor(ASAPS, levels = c("1", "2", "3", "4"), ordered = TRUE),
Sex = readr::parse_factor(Sex, levels = c("M", "F"), ordered = TRUE),
) %>%
# 整数値と論理値の列を処理
# dplyr::mutate_at(ct_int, funs(readr::parse_integer(.))) %>%
# dplyr 0.8.0からfuns()は非推奨でpurrrと同じように~を利用する
dplyr::mutate_at(ct_int, ~ readr::parse_integer(.)) %>%
dplyr::mutate_at(ct_logical, ~ readr::parse_logical(.))
col_types
で"numeric"
を指定していて、Excel上のセルタイプでも数値データなのに読み込み時にExpecting numeric in E9 / R9C5: got a date
のようなWarningsが大量発生することがある。自動判定だとdate
タイプとされてしまう。指定さえしていれば実際にはnumeric
で読み込んでおり実害はないのだが、他のエラーが埋もれる勢いなので、suppressWarnings()
で読み込み部分は囲ってしまうか、チャンクオプション(warning=FALSE
)を変えるとするか良いかもしれない。以下のブログを見る限り放っておくしかなさそう。
readr::write_excel_csv()
を使えば良いとのこと。通常はUTF-8で出力されるのにWindowsのExcelがSJISで読み込もうとするのが原因らしい。
R言語でGoogle Spreadsheetと連携する方法あれこれ。 https://speakerdeck.com/jennybc/googlesheets-talk-at-user2015 http://hacknote.jp/archives/10712/ http://qiita.com/uri/items/2e108d6fcbd80ef58444 https://github.com/jennybc/googlesheets