しばらく使わないと、すぐに忘れる自分のために



Rには、とてもよくメンテナンスされたRjpWikiRjpWiki - RjpWikiがある。日本語であり、熱意のあるメンバーによる管理がされている。インストール・使用法についてはそちらを参照するとして、Rのデータ型って、どんなんだったっけ?といった、健忘症対策に、ネットにつながる環境さえあれば、参照可能な自分用のメモとして記載する。

  • packageの読み込み

-->library(hogehoge_package)

  • 剰余・整数商

-->10%%3は1(剰余)

-->10%/%3は3(整数商)

  • 繰り返しを用いてデータ作成

> 1:10

[1] 1 2 3 4 5 6 7 8 9 10

(1から、1ずつ増加させて10まで)

> 1.5:4.7

[1] 1.5 2.5 3.5 4.5

(1.5から、1ずつ増加させて4.7まで)

      • seq関数

> seq(4.5, 10.3,by=1.1)

[1] 4.5 5.6 6.7 7.8 8.9 10.0

(4.5から1.1ずつ増加させて10.3まで)

      • rep関数

> myvector<-rep(c(3,2,1),4)

> myvector

[1] 3 2 1 3 2 1 3 2 1 3 2 1

((3,2,1)を4回繰り返し)

    • matrix型
      • vectorからmatirixへの変換

> mymatrix<-matrix(myvector,ncol=4)

> mymatrix

[,1] [,2] [,3] [,4]

[1,] 3 3 3 3

[2,] 2 2 2 2

[3,] 1 1 1 1

> mymatrix2<-matrix(myvector,nrow=4)

> mymatrix2

[,1] [,2] [,3]

[1,] 3 2 1

[2,] 2 1 3

[3,] 1 3 2

[4,] 3 2 1

    • list型
      • さまざまなデータ型の集合体(javaのclassに情報を持たせるようなもの)

> name<-"tarou"

> name

[1] "tarou"

> age<-50

> friend<-c("jirou","hanako","masaru")

> friend

[1] "jirou" "hanako" "masaru"

> id<-1

> member<-list(id=id,name=name,age=age,friends<-friend)

> member

$id

[1] 1

$name

[1] "tarou"

$age

[1] 50

4

[1] "jirou" "hanako" "masaru"

    • data.frame型
      • 同長vectorを要素とするlist
      • 外部からデータを読み込む関数はdata.frameを返す
      • listのままでもdata.frameに変換しても、元のvectorを呼び出すことができるが、listのままでは、複数のvectorの値を横断的に参照できないのに対し、data.frameに変換するとそれが可能となることが、以下の例でわかる

> v1<-1:5

> v2<-11:15

> mylist<-list(c1=v1,c2=v2)

> mylist

$c1

[1] 1 2 3 4 5

$c2

[1] 11 12 13 14 15

> df1<-data.frame(mylist)

> df1

c1 c2

1 1 11

2 2 12

3 3 13

4 4 14

5 5 15

> df1$c1

[1] 1 2 3 4 5

> mylist$c1

[1] 1 2 3 4 5

> df1[,2]

[1] 11 12 13 14 15

> mylist[,2]

Error in mylist[, 2] : incorrect number of dimensions

    • data.frame型はデータ(のみを格納する)部分と、データの列名・行名を把持する2つのベクターとから構成される。列名・行名ベクターを明示的に与えないと、デフォルトのベクターが作られる

> df1

c1 c2

1 1 11

2 2 12

3 3 13

4 4 14

5 5 15

> vec_colname<-c("a","1")

> vec_rowname<-c("ichiro","jiro","saburo","shiro","goro")

> colnames(df1)<-vec_colname

> rownames(df1)<-vec_rowname

> df1

a 1

ichiro 1 11

jiro 2 12

saburo 3 13

shiro 4 14

goro 5 15

>


  • テキストファイルの読み込み

-->read関数、詳しくは、help(read.table)を参照のこと

-->作成されるのはtableオブジェクト

>hogehogetable<-read.table("hogehoge.txt",FALSE,"\t")は、タブ区切りのテキストファイル"hogehoge.txt"を読み込むとき。1行目にheaderとしてカラム名がついているなら、TRUE、ついていないなら、FALSE。hogehogetableに格納された。カラム名は入力されていないので、V1,V2,...とVと数字とで作られたカラム名が与えられる。

-->scan関数:より高速、少し読みこみ条件指定が必要

> scantest<-scan("hogehoge.txt",list(v1="",v2=0,v3=""),sep="\t",skip=1)

-->"hogehoge.txt"ファイルが、3列のファイルで、1行目がヘッダである。第1カラムは文字列情報、第2カラムは数値情報、第3カラムは文字列情報なので、読み込んだあとのRのデータ型として、list(v1="",v2=0,v3="")のように、指定している。第1カラムはカラム名がv1で型は文字列、第2カラムはカラム名がv2で型は数値。最後の引数skip=1は1行目を飛ばせ、ということ。

-->data.frameに変換したいときには

>df_scantest<-data.frame(scantest)

でread.tableと同じ結果となる。

  • テーブルオブジェクトのテキストファイルへの書き出し
    • write関数、詳しくは、help(write.table)を参照のこと

-->上記で作成されたテーブルオブジェクトを別名ファイル"outhogehote.txt"にタブ区切りで出す。

> write.table(hogehogetable,file="outhogehoge.txt",append=FALSE,quote=FALSE,eol="\n",sep="\t",row.names=FALSE,col.names=FALSE)

-->テーブルオブジェクト、出力ファイル名、append=FALSEで上書き、quote=FALSEで出力値に引用符をつけない、eol(end of line)は改行文字、sepは区切り文字の指定、行名・列名ともにつけずに出すので、row.names=FALSE,col.names=FALSE

  • hist関数

> j22tmpdata<-c(runif(100,min=0,max=1))
# 0から1の乱数を100個発生してj22tmpdataに入れる
> j22tmpdata
[1] 0.29834839 0.59057080 0.50577354 0.28370435 0.48784632 0.15686935
[7] 0.33062094 0.99823210 0.42299903 0.14855163 0.27550610 0.50518440
[13] 0.58657535 0.39760378 0.16697173 0.79872360 0.33982274 0.24430232
[19] 0.93968214 0.07758803 0.85013705 0.60864153 0.99915926 0.95313649
[25] 0.80936061 0.72082203 0.14054046 0.47619936 0.89220530 0.38484726
[31] 0.74602025 0.99022404 0.22296852 0.17298241 0.47907812 0.79320557
[37] 0.14533073 0.32461050 0.02979635 0.67378080 0.10286193 0.61593261
[43] 0.49026469 0.60562093 0.78763507 0.58561485 0.85490900 0.14232201
[49] 0.94220738 0.08756301 0.29789468 0.05417880 0.33976503 0.59814192
[55] 0.17211491 0.15301861 0.05427404 0.09345107 0.98832463 0.96796407
[61] 0.09036538 0.66769156 0.51581425 0.45481441 0.76590520 0.16309054
[67] 0.65973778 0.68603435 0.03826303 0.27352269 0.62410636 0.19788164
[73] 0.28963111 0.54710188 0.31258887 0.11103143 0.07236792 0.97995799
[79] 0.87907553 0.33173455 0.08896059 0.83134137 0.92575227 0.21897119
[85] 0.33209574 0.02750048 0.05988707 0.20471706 0.26109456 0.12555684
[91] 0.74232530 0.24297104 0.35746808 0.02480396 0.74735525 0.84475388
[97] 0.57920968 0.41693680 0.71748871 0.35595911
# j22tmpdataの中身
> h<-hist(j22tmpdata)
# それをhist関数のデフォルト処理をする->してみてください

> hist
# hに格納された情報を見ると・・・
> h
$breaks
[1] 0.0 0.1 0.2 0.3 0.4 0.5 0.6 0.7 0.8 0.9 1.0

# ここに区切りの指定が入っていることがわかる
# ので、このbreaksに引数指定して描きなおす

> h2<-hist(j22tmpdata,breaks=c(0,0.5,1))

# 刻み幅が変わって表示される。