# ←この記号の後は次の改行までコメントになります。

# Rオブジェクト編

# これまで、Lesson 3-4でベクターを、Lesson 5-6でデータフレームを取り扱ってきました。
# ベクターやデータフレームは、何種類かあるRオブジェクトの一部です。今回はRオブジェクトについてまとめます。

# スカラー(scalar)
# 数学での表現と同じで、スカラーはひとつの量です。Rでは数字だけでなく文字もスカラーです。
a<-3 # 数値のスカラー
a
## [1] 3
mode(a) # mode関数はその中身が、数字モードなのか、文字モードなのか、論理値モードなのかなど、中身の質を返します。
## [1] "numeric"
a<-"three" # 文字列のスカラー
a
## [1] "three"
mode(a)
## [1] "character"
a<-TRUE # 論理値のスカラー
a
## [1] TRUE
mode(a)
## [1] "logical"
# ベクター(vector)
# 同種のスカラーの組み合わせがベクターであり、逆に言えば、長さ1のベクターがスカラーです。
a<-c(1,2,3)
a
## [1] 1 2 3
mode(a)
## [1] "numeric"
a<-c("one","two","three")
a
## [1] "one"   "two"   "three"
mode(a)
## [1] "character"
a<-c(T,T,F) #TRUEはT FALSEはFと省略することができます。
a
## [1]  TRUE  TRUE FALSE
mode(a)
## [1] "logical"
# 因子型(factor)も試してみましょう。
a<-factor(c(1,2,2),labels=c("Female","Male"))
a
## [1] Female Male   Male  
## Levels: Female Male
mode(a) # 因子型はmode関数では文字列ではなく、数値として表されます。
## [1] "numeric"
class(a) # class関数はほぼ同じ(一部異なる)動作をします。各自で試してみて下さい。
## [1] "factor"
# データフレーム(data frame)は等長のベクターの集合です。
# Lesson 5-6で詳しく行ったので、軽く触れるだけで。
dataset.lesson5<-
  data.frame(
    age=c(63,82,62,58,71,60,64,74,89,72),
    sex=c("Male","Male","Female","Male","Female","Female","Male","Male","Male","Female"),
    stage=ordered(c(1,3,2,2,4,1,3,2,2,3),labels=c("I","II","IIIa","IIIb")),
    ethnicity=factor(c(rep("Japanese",4),"Chinese","Japanese","Korean",rep("Japanese",3)))
  )
class(dataset.lesson5)
## [1] "data.frame"
nrow(dataset.lesson5) # 行数(サンプル数、症例数)を調べる。
## [1] 10
# マトリックス(matrix) n * m の行列を作ることができます。
c(1:6) # 1,...,6 のベクター
## [1] 1 2 3 4 5 6
a<-matrix(c(1:6),nrow=2,ncol=3) # 2 * 3 行列にする
a
##      [,1] [,2] [,3]
## [1,]    1    3    5
## [2,]    2    4    6
a<-matrix(c(1:6),nrow=3,ncol=2) # 3 * 2 行列にする
a
##      [,1] [,2]
## [1,]    1    4
## [2,]    2    5
## [3,]    3    6
nrow(a) # 行数
## [1] 3
ncol(a) # 列数
## [1] 2
dim(a)
## [1] 3 2
# 更にarray関数で三次元以上の配列を作ることもできますが、普通は使わないので割愛
a<-array(c(1:12),dim=c(2,3,2))
a
## , , 1
## 
##      [,1] [,2] [,3]
## [1,]    1    3    5
## [2,]    2    4    6
## 
## , , 2
## 
##      [,1] [,2] [,3]
## [1,]    7    9   11
## [2,]    8   10   12
dim(a)
## [1] 2 3 2
# リスト(list) 複数のオブジェクトを種類を問わず入れることができます。
# 例えば、このレッスンで使ったものを全部入れることもできます。

a<-
  list(
    3,
    c("one","two","three"),
    c(T,T,F),
    dataset.lesson5,
    matrix(c(1:6),nrow=3,ncol=2))
a[[1]] # リストの1番目にアクセスします。
## [1] 3
a[[2]] # リストの2番目にアクセスします。
## [1] "one"   "two"   "three"
a[[3]] # リストの3番目にアクセスします。
## [1]  TRUE  TRUE FALSE
a[[4]] # リストの4番目にアクセスします。
##    age    sex stage ethnicity
## 1   63   Male     I  Japanese
## 2   82   Male  IIIa  Japanese
## 3   62 Female    II  Japanese
## 4   58   Male    II  Japanese
## 5   71 Female  IIIb   Chinese
## 6   60 Female     I  Japanese
## 7   64   Male  IIIa    Korean
## 8   74   Male    II  Japanese
## 9   89   Male    II  Japanese
## 10  72 Female  IIIa  Japanese
a[[5]] # リストの5番目にアクセスします。
##      [,1] [,2]
## [1,]    1    4
## [2,]    2    5
## [3,]    3    6