R(3)リスト

Computation
R
Author

司馬博文

Published

5/07/2021

Modified

6/05/2024

概要
R におけるリストは,独自の index $ を持った構造体であり,Python の dictionary, Perl の hash table に似ている.$ は S3 の機能で,S4 は @ である.これはリストが本質的に R の実装の深いところに存在するデータ型だからである.

はじめに

R における行列 (matrix) は dim 属性を持ったベクトルであった.これと同様に,R におけるリストには names 属性があり,リストの各内容に名前をつける役割を持つ.そしてこの names 属性は$を使ってアクセスできる.

R におけるすべてのオブジェクトは class 属性を持っている.S3 におけるすべてのオブジェクトは class 属性を持つリストとして実装されているためである.オブジェクトが関数に呼ばれた際は,このclass属性の値を確認して,適切なメソッドが呼ばれる.

example_list <- list(a=1,b=2)
class(example_list) <- "my_class"
example_list
$a
[1] 1

$b
[1] 2

attr(,"class")
[1] "my_class"
attributes(example_list)
$names
[1] "a" "b"

$class
[1] "my_class"

1 リスト

R.versionhist()の返り値などは,breaks, countsオプションを持ったリストである.これはarrtibutes()あるいはstr()あるいは直うち,またはclass毎に誂えられた generic 関数であるprint()summary()で確認できる.

attributes(R.version)
$names
 [1] "platform"       "arch"           "os"             "system"        
 [5] "status"         "major"          "minor"          "year"          
 [9] "month"          "day"            "svn rev"        "language"      
[13] "version.string" "nickname"      

$class
[1] "simple.list"
str(R.version)
List of 14
 $ platform      : chr "aarch64-apple-darwin20"
 $ arch          : chr "aarch64"
 $ os            : chr "darwin20"
 $ system        : chr "aarch64, darwin20"
 $ status        : chr ""
 $ major         : chr "4"
 $ minor         : chr "4.0"
 $ year          : chr "2024"
 $ month         : chr "04"
 $ day           : chr "24"
 $ svn rev       : chr "86474"
 $ language      : chr "R"
 $ version.string: chr "R version 4.4.0 (2024-04-24)"
 $ nickname      : chr "Puppy Cup"
 - attr(*, "class")= chr "simple.list"
summary(R.version)
               Length Class  Mode     
platform       1      -none- character
arch           1      -none- character
os             1      -none- character
system         1      -none- character
status         1      -none- character
major          1      -none- character
minor          1      -none- character
year           1      -none- character
month          1      -none- character
day            1      -none- character
svn rev        1      -none- character
language       1      -none- character
version.string 1      -none- character
nickname       1      -none- character

1.1 コンストラクタ

  • 構成
    • list(arg1,arg2,…)
    • name=arg1とすると[[1]]ではなく$nameという名前付きで list にできる.
  • 名前
    • names(list) <- c(“name1”,”name2”):後からタグ付けで参照できる.
example_list
$a
[1] 1

$b
[1] 2

attr(,"class")
[1] "my_class"
example_list[[1]]
[1] 1
example_list[[a]]
Error in eval(expr, envir, enclos): object 'a' not found
example_list$a
[1] 1

1.2 参照方法

  • L[[1]]またはL$name:要素の参照,次元が違うのに注意.
    • [1]が行ベクトルを表す.それが[[1]], [[2]], ……と進んでく.
  • $で参照した場合は,最初の数文字で予測できれば省略可能.
names(example_list) <- c("aaaaa","bbbbb")
example_list
$aaaaa
[1] 1

$bbbbb
[1] 2

attr(,"class")
[1] "my_class"
example_list$a
[1] 1

2 データフレーム

各要素がベクトルであるリストのこと.従って明らかに縦にベクトル構造を持つ.対称ではないのは数学と同じ.

2.1 コンストラクタ

  • 構成
    • data.frame(…, colname=vector, …)
      • 列の名前をつけながら.行の名前のデフォルトは \(\mathbb{N}\)
      • 行列を引かせても良い.
  • 名前
    • row.names(df) <- vector:行に名前をつける.
    • names(df):すでについている名前
      • column に時間や変数などの構造化されたデータが来がち.

2.2 参照方法

基本

, 付きのオブジェクトで言及するとベクトルを得る.ベクトルオブジェクトで言及すると部分フレームを得る.(多分呼ばれてる関数が違う)

  • df[n]\(n\) 列目を data-frame 列として得る
    • 行列同様,列に対して特別な扱いをしている.
  • df[n,]\(n\) 行目を data-frame 行として得る.
  • df[,n]\(n\) 列目を data-frame 行として得る.
  • subset(x):切り出して使う.
  • df[-n]:除外
    • 論理値で指定
  • df$Name:列の名前で indexing して,必ずベクトルを得る.
  • [,drop=TRUE]:が隠れているので,これをFALSEにして強制的にdfを返すことができる.
  • 列の2番目の index はc(1,5)の代わりにc(Month,Day)で参照してもよく,$の後と同様””で String 型にする必要はない.