ずっとやらずに放置してきたR言語だったけど、
ようやく先週からcourseraのR Programmingという授業を始めてみた。

コースのWeek1のメモ。

Rの型

基本の型

文字列 character
実数 number
整数 integer
複素数 complex 
真偽値 logical  (= boolean)
  • ベクトル値(≒ 同型の配列): vector()

実数(number)

  • 末尾にLをつけると 整数(integer)になる
    • x <- 1
    • x <- 1L
  • 無限を表すInf
  • 未定義値のNaN

属性

  • attribute() 関数
  • names, dimnames
  • dimensions
  • class / length / other

ベクトル値

  • 同じ型の配列
  • c() 関数で値から作成可能(concatenate)
    > x <- c("a", "b", "c")
    > x
    [1] "a" "b" "c"
  • vector() 関数で定義作成可能
    > x <- vector("numeric", length = 10)
    > x
    [1] 0 0 0 0 0 0 0 0 0 0
  • 違う型のものを混ぜると優先度に従って自動で型の統一が起こる
    • 文字列 > 数値 > 真偽値
  • as.xxx() によって型キャストが可能。破綻するものはNAとして表される
    > as.numeric(x)
    > as.logical(x)
    > as.character(x)

リスト

  • 異なる型を格納可能な特別なベクトル

マトリックス(行列)

  • matrix() 関数で定義可能
    > m <- matrix(nrow = 2, ncol = 3)
  • dim() で行列の定義を確認できる(attributes() で見ると dim属性が設定されていることが分かる)
  • ベクトルで初期値を入れると、縦列から埋めていく
    > m <- matrix(1:6, nrow = 2, ncol = 3)
    > m
        [,1] [,2] [,3]
    [1,] 1 3 5
    [2,] 2 4 6
  • ベクトルにdim属性を加えるでも行列を作成可能
    > m <- 1:10
    > dim(m) <- c(2, 5)
    > m
        [,1] [,2] [,3] [,4] [,5]
    [1,] 1 3 5 7 9
    [2,] 2 4 6 8 10

ファクター(因子)

  • ベースラインレベルは levels() で設定可能

欠損値

  • NA / NaN
  • 同じNAでも違う型になる
  • NaN ∈ NA

データフレーム

  • 表形式のデータ

名前

  • オブジェクトには名前を付けることが可能
  • names()
  • dimnames()

ファイルの読み書き

read.table <-> write.table // 表形式データ
read.csv <-> write.csv     // カンマ区切り
readLines <-> writeLines   // 一行づつ読み込み
source <-> dump            // Rのソースコード
dget <-> dput              //  単一のオブジェクトの読み書き
load <-> save              // 複数のオブジェクトの読み書き
unserialize <-> serialize  // ?

read.tableで読み込むときのオプション指定

- file = (string)ファイル名
- header = (logical)ヘッダー行の有無
- sep = (char)区切り文字
- colClasses = 
- nrows = (int)行数
- comment.char = (char)コメント文字
- skip = (int)読み込みを飛ばす行数
- stringsAsFactors = (logical)文字列型をファクターとして読み込むかどうか

データ量が少ない場合は、オプション無しのファイル名だけで良い

x <- read.table(“data.txt")

read.table()のデフォルトの挙動は以下のとおり

  • 「#」で始まる行は飛ばす
  • 読み込む行数を自動で計算
  • 各列の型を自動で判定

read.csv()は区切り文字がカンマになっていること以外は、read.table()と同じ

read.table(file, sep=",")

データ量が大きい場合

  • Rのヘルプページに有益な情報がたくさんある
  • 必要なメモリ量をおおまかに計算したほうが良い
  • コメント行が存在しない場合は comment.char = "" を指定する
  • colClassesを指定すると読み込みがおよそ2倍は早くなる
    • 型が全て同じ場合は、 colClasses = "numeric"のように一つ指定するだけで良い。
    • 下記のようなコードで自動判定を使いながら早く読み込むことが出来る
initial <- read.table("datatable.txt", nrows = 100) // 100行だけまず読み込む
classes <- sapply(initial, class)  // 型の判定結果を保存
tabAll <- read.table("datatable.txt”, colClasses = classes) // 100行だけ推定した型を使用して、全行読み込む
  • nrowsを指定すると、早くはならないがメモリの使用量を抑えることが出来る。 wc コマンドの結果を使用すると良い

メモリ使用量について

  • 1,500,000行、120列の実数表データがある場合のメモリ使用量は下記の通り
1,500,000 * 120 * 8byte(64bitOSのnumeric型の場合)
= 1440000000byte 
= 1440000000 / 2^20 MB 
≒ 1,373MB 
≒ 1.34GB

実際には↑のデータ以外にもメモリを必要とする。
だいたい、必要データ数の2倍くらい必要となるため、
上記のデータをメモリ2GBのパソコンで読み込もうとするとメモリ不足となってしまう。

ファイル

  • file / gzfile / bzfile / url
  • openオプション:
    • r=読み込み専用
    • w=書き込み(新規作成)
    • a=書き込み(追記)
    • rb, wb, ab = Windowsのバイナリモード用
Posted in R

Leave a Reply

Your email address will not be published. Required fields are marked *