R言語、RStudioの使い方
R言語を勉強するにはRStuidoを起動して、コンソールでR言語に慣れていくのが一番良いかと思います。
> a + b Error: object 'a' not found > 'aa' + 'b' Error in "aa" + "b" : non-numeric argument to binary operator > 1 + 2 [1] 3
数値や文字列はオブジェクトということになるようです。
文字列(オブジェクト)を扱ってみます。
> val <- 'test' > val [1] "test" >
valというオブジェクトにtestという文字列を代入しました。
コンソールをクリアする
コンソールをクリアしたい場合は、RStudio上で、ctrl + l
を押します。これでコンソールがクリアされます。
オブジェクト名 <- オブジェクト
この書き方が基本のようです。sumなど関数も使えるようです。
a <- 10:1 > a [1] 10 9 8 7 6 5 4 3 2 1 > sum(a) [1] 55
数値:数値
とすると、連続する数値をオブジェクトに代入することができます。配列のようですが、R言語ではベクトルと呼びます。
代入のことをR言語では、付値演算子と呼びます。
オブジェクト名の命名規則
日本語でもいけます。数値から始まるオブジェクト名はできないようです。
大文字と小文字は別オブジェクトとなります。
> a<-1 > A<-2 > a [1] 1 > A [1] 2
c()でベクトルを作成する
c()でベクトルを作成することができますが、他言語の配列と唯一違うのは、型が違っても大丈夫という点です。
c(1,"1","T") [1] "1" "1" "T"
ベクトルには配列と同様に要素にアクセスすることができます。ただし、基底値は1です。
> a<-c(1,"1","T",1) > a[1] [1] "1" > a[2] [1] "1" > a[3] [1] "T" > a[4] [1] "1" > a[5] [1] NA
1==”1″はTRUE
どうもオブジェクトは数値と文字列は区別しないようです。1==”1″とするとTRUEになります。
> 1 == 1 [1] TRUE > 1 == "1" [1] TRUE
組み込み関数のlengthでベクトルの長さを求める
大体の言語は、配列名.lengthだったりしますが、R言語は、以下のようにして求めます。
length(オブジェクト)
以下のような感じです。
> a [1] "1" "1" "T" "1" > length(a) [1] 4
ベクトルの要素が全てTRUEか調べるall、一つでもTRUEがあるかを調べる場合はany
all関数を使うとベクトルの要素が全てTRUEかどうか調べることができます。
> a<-c(TRUE,TRUE) > all(a) [1] TRUE > a<-c(TRUE,FALSE) > all(a) [1] FALSE
any関数を使うと一つでもTRUEがあると、TRUEになります。
> a<-c(TRUE,TRUE) > any(a) [1] TRUE > a<-c(TRUE,TRUE,FALSE) > any(a) [1] TRUE > a<-c(FALSE,FALSE) > any(a) [1] FALSE
色々組み込み関数があるようですが、全部調べることはできないのでいくつか使ってみます。
unique関数は、ベクトルの重複要素を除く関数です。
> a<-c(1,'1',2,3,4, '4') > unique(a) [1] "1" "2" "3" "4"
使い道はわかりませんが、0をn個並べたベクトルを作成する場合はnumeric関数を使います。
> numeric(5) [1] 0 0 0 0 0
ベクトルの要素を変更する
ベクトルを作成して、要素を変更することができます。要素は読み取り専用ではありません。
以下のようにして代入すれば要素を変更することができます。
> a [1] "1" "2" "3" "4" > a[1] <-6 > a [1] "6" "2" "3" "4"
ベクトルの指定した要素範囲を取り出すには、ベクトルオブジェクト[i:j]というように記述すれば取り出すことができます。
> a [1] "1" "2" "3" "4" > a[2:4] [1] "2" "3" "4" > a[2:5] [1] "2" "3" "4" NA
厳密にはオブジェクトには型がある
オブジェクトでもnumericだったりcharacterだったり型が存在します。型を調べるには、mode関数を使います。
> a<-'1' > a [1] "1" > mode(a) [1] "character" > a<-1 > a [1] 1 > mode(a) [1] "numeric"
日付型はnumericとして扱われるみたいです。
> dt1 <- as.Date("2018-08-20") > mode(dt1) [1] "numeric"
ついでに本当にnumericでオブジェクト作成してas.Dateで作成したオブジェクトと等しいか調べてみました。
> dt1 <- as.Date("2018-08-20") > dt2 <- "2018-08-20" > dt1 == dt2 [1] TRUE
どうも等しいようです。が、seqで日付オブジェクトを作成するとエラーとなります。
> dt1 [1] "2018-08-20" > dt2 [1] "2018-08-22" > seq(dt1,dt2) Error in seq.Date(dt1, dt2) : 'to' は "Date" オブジェクトでなければなりません
dt2がDateオブジェクトではないということで、エラーになるようです。
dt2をDateオブジェクトにすると、seqを使って連続した日にちを取得することが可能です。
> dt1 <- as.Date("2018-08-20") > dt2 <- as.Date("2018-08-22") > seq(dt1,dt2, by="day") [1] "2018-08-20" "2018-08-21" "2018-08-22"
連続した日にちの場合は、seqの第三引数にby=”day”が必要です。
その他にも以下があります。
項目 | 内容 |
---|---|
by = “days” | 日 |
by = “week” | 週 |
by = “month” | 月 |
by = “quarter” | 四半期 |
by = “year” | 年 |
さらに by = “2 days”というように数値をつけると2日という意味になります。
length.outをつけると開始日付から、何日とか何週とかを取得することも可能です。
> dt1 <- as.Date("2018-08-20") > seq(dt1,by="day",length.out=3) [1] "2018-08-20" "2018-08-21" "2018-08-22"
システム日付
システム日付は、Sys.Date()で取得することができます。
> Sys.Date() [1] "2018-08-18" > Sys.Date() -2 [1] "2018-08-16" > Sys.Date() -19 [1] "2018-07-30"
Sys.time()とすると、「YYYY-MM-DD hh:mm:ss JST」形式で表示されます。
-20とかすると、秒数がマイナスされます。
> Sys.time() [1] "2018-08-18 11:27:19 JST" > Sys.time()-20 [1] "2018-08-18 11:27:02 JST"
unclass
unclassというのは、1970年1月1日から経過した日にちを計算してくれます。
> a <- Sys.Date() > a [1] "2018-08-18" > unclass(a) [1] 17761 # 1970年1月1日から17761日経過していることを意味する
型変換する
ベクトルを型変換することができます。以下はnumericをcharacterに変換している例です。
> a <- c(0,1) > mode(a) [1] "numeric" > mode(a) <- 'character' > a [1] "0" "1"
エクセルみたいなデータフレーム
R言語にはデータフレームというのがあって、ベクトルを駆使してエクセルみたいなデータを作成することができます。data.frame
を使用します。
> sheet <- data.frame(title=c('英語','数学','国語'),takahashi=c(80,50,60),maruyama=c(0,0,0)) > sheet title takahashi maruyama 1 英語 80 0 2 数学 50 0 3 国語 60 0
head()関数を使うと、冒頭6行のみ表示できます。指定した行数を表示したい場合はhead()関数の第二引数に行数を指定します。基底は1です。
> head(sheet,1) title takahashi maruyama 1 英語 80 0
list関数
list関数は複数オブジェクトを纏めた可変長引数の関数です。
> df1 <- 1 > df2 <- 2 > df3 <- 3 > lst <- list(df1,df2,df3) > lst[1] [[1]] [1] 1 > lst[2] [[1]] [1] 2 > lst[3] [[1]] [1] 3
CSVを読み込む
CSVファイルを読み込むには、read.csv(ファイル名)で読み込みます。CSVファイルには最後に空行が必要です。
a<-read.csv("sample.csv") > a 本体 番号 部品 1 パソコン本体X 1 キーボード 2 パソコン本体Y 2 マウス 3 パソコン本体Z 3 ディスプレイ
ヘッダがないデータのCSVの場合は、header=FALSE
を指定します。その場合、列はV1,V2,V3…と表示されます。
> a<-read.csv("sample.csv",header=FALSE) > a V1 V2 V3 1 本体 番号 部品 2 パソコン本体X 1 キーボード 3 パソコン本体Y 2 マウス 4 パソコン本体Z 3 ディスプレイ
CSVの列にアクセスすることができます。ヘッダ名が存在する場合(header=TRUE)は、a$本体、a$番号、といったように$を使ってアクセスすることが可能です。
ヘッダが存在しない場合は、V1と$を使ってアクセスします。
> a<-read.csv("sample.csv",header=FALSE) > a V1 V2 V3 1 本体 番号 部品 2 パソコン本体X 1 キーボード 3 パソコン本体Y 2 マウス 4 パソコン本体Z 3 ディスプレイ > a$V3 [1] 部品 キーボード マウス ディスプレイ Levels: キーボード ディスプレイ マウス 部品
input string 1 is invalid in this locale
「input string 1 is invalid in this locale」と表示されたらUTF-8設定ができていません。
デフォルト文字コードを変更するには、option関数を使用します。
options(encoding = "utf-8")
これで文字コードがUTF-8になります。ただし、RStudioを再起動するとこの設定は消えますので、R言語を起動するときのフォルダー直下に.Rprofileファイルを作成し、その先頭1行目に蒸気を記述します。
RStudioのホームディレクトリ
RStudioにはホームディレクトリというのがあって、getwd()コマンドで調べることができます。
> getwd() [1] "C:/Users/takahashi/Documents"
ホームディレクトリを変更するには、setwd()コマンドの引数にパスを指定すればよいです。相対パスでも大丈夫です。
> setwd("~/R") > setwd('../') > getwd() [1] "C:/Users/takahashi/Documents"
もしくは、Filesの「More」ー「Set As Working Directory」で変更することも可能です。
.Rprofile
options(encoding = "utf-8")
これでRStudio再起動時にホームディレクトリ直下の.Rprofileが読み込まれるので、デフォルトでUTF-8となります。
CSVファイルを作成する
CSVファイルを作成するには、write.csvを使用します。1列目の行番号を非表示にしたい場合は、row.names=FALSEにします。ダブルクォーテーションで囲みたくない場合は、quote=FALSEにします。
> write.csv(a,"./a.csv",row.names=FALSE,quote=FALSE) > a V1 V2 V3 1 本体 番号 部品 2 パソコン本体X 1 キーボード 3 パソコン本体Y 2 マウス 4 パソコン本体Z 3 ディスプレイ
a.csvを「View File」するとa.csvが表示されます。
Rのパッケージ管理
Rではパッケージ管理ができます。インストールするには
install.packages("パッケージ名",dependencies = TRUE)
とするとCRANで公開されているパッケージをインストールすることができます。
パッケージをアンインストールするには
remove.packages("パッケージ名")
とするとアンインストールすることができます。
packageVersion関数
インストールされているパッケージのバージョンを調べる関数です。
> packageVersion("rmarkdown") [1] ‘1.10’
library関数
パッケージ名の一覧はlibrary関数で調べることができます。
> library()
R Markdownの作成方法
RStudioを使ってR Markdownを作成することができます。
Markdownは.mdファイルですが、R Markdownは.Rmdファイルになります。
RStudioの左上の「+」ボタンを押し、「R Markdown」をクリックします。
以下が表示されたら「Yes」をクリックしてください。
TitleとAuthorを入力し、PDF、HTML、WORDのどれかを選択します。ここではPDFを選択しています。
「OK」を押すとファイルが作成されます。
「Knit」というボタンがあるので、ここでは「Knit to PDF」を選択します。Knitは、接合とか結合という意味のようです。
すると、以下のエラー(一部)が出ました。
エラー: Failed to compile a.tex. 追加情報: 警告メッセージ: system2(..., stdout = FALSE, stderr = FALSE) で: '"pdflatex"' not found 実行が停止されました
Windowsの場合は、MiKTeXというのをセットアップする必要があるようです。
Windows: MiKTeX (Complete) - http://miktex.org/2.9/setup
Downloadします。
ダウンロードした「setup-2.9.6637-x64.exe」を実行します。
「次へ」をクリックします。
「Download MiKTeX」を選択して「次へ」をクリックします。
「Complete MiKTeX」を選択して「次へ」をクリックします。
「Japan」を選択して「次へ」をクリックします。
ダウンロード先を選択して「次へ」をクリックします。
「Start」をクリックします。これでダウンロードが開始されます。ダウンロードに30分くらいはかかります。
「次へ」をクリックします。
「Close」をクリックします。
これで、デスクトップに「MiKTeX Download Files」フォルダが作成されいてると思います。
再度、setup-2.9.6637-x64.exeを実行します。「次へ」をクリックします。
「次へ」をクリックします。
「次へ」をクリックします。
「次へ」をクリックします。
「次へ」をクリックします。
「次へ」をクリックします。
「Start」をクリックします。
「次へ」をクリックします。
「Close」をクリックします。
これでPDFが出力できるかと思い、「Knit to PDF」を再度してみます。
無事、PDFファイルが出力されました。
Rチャンク
Markdownとの違いは、Rチャンクというが記述できるという点です。
RチャンクでRのコードが記述できるようになります。
geosphereパッケージをインストールして世界地図を表示する
install.packages("geosphere",dependencies = TRUE)
でgeosphereをインストールします。依存関係にあるパッケージもインストールします。
> library("geosphere") > plot(wrld, type = "l")
これで、Plotsに世界地図が表示されます。
RStuidoを終了する
RStuidoをコマンドで終了するには
> q()
で終了することができます。
用語
NAは、欠損値 (Not Available) の略です。
「R言語をインストール、RStudioをインストールする」も合わせてお読み下さい。
項目 | バージョン |
---|---|
R | 3.5.1 |
RStudio | 1.1.456 |
KHI入社して退社。今はCONFRAGEで正社員です。関西で140-170/80~120万から受け付けております^^
得意技はJS(ES6),Java,AWSの大体のリソースです
コメントはやさしくお願いいたします^^
座右の銘は、「狭き門より入れ」「願わくは、我に七難八苦を与えたまえ」です^^
コメント