Rの基本的な機能 & tips

R 本体(Windows版)のアップデート

22 October 2017

Updating R from R (on Windows) – using the {installr} package
Windows用Rのバージョンアップ

 install.packages("installr")
 library(installr)
 updateR() 

Object の調査:str()

21 March 2018

str() 関数はいろいろできるらしいのだけれど……

str(obj)

数の扱い

二進数 digitsBase()

23November2013

10進数を二進数のベクトルに変換する
パッケージ sfsmisc のインストールが必要

> library(sfsmisc) 
> mydigits <- digitsBase(1101, base=2)
> mydigits
Class 'basedInt'(base = 2) [1:1]
      [,1]
 [1,]    1
 [2,]    0
 [3,]    0
 [4,]    0
 [5,]    1
 [6,]    0
 [7,]    0
 [8,]    1
 [9,]    1
[10,]    0
[11,]    1
> mydigits <- digitsBase(1101, base=2,13) ← ベクトルの長さを指定したいとき

二進数に限らず利用できる

重複しないランダムな数 sample()

23November2013
> sample(0:20,3)
[1]  0 11  6

0から20のうちランダムに3つの数字を重複せずに取り出す

数値の切り捨て

21 March 2018

万能ではないかもしれない
さらに、これは、車輪の再発明になっているかもしれない (が、round down が見つけられなかったのよ)

sprintf を使うと、round されてしまう
統計量は round ではなく切り捨てがよいことも多いので (四捨五入したら有意になってしまうかもしれない*1)、 文字列の操作とすることにして round down を実現する
文字数を数えて、最終的な文字列の長さを決める
元々の小数点以下桁数がわからないものを、小数点以下 dp桁に切り捨てる
マイナス記号が付くと文字列が長くなるので……
関数化しておくとよいのはわかるけれど、 後々のメンテナンスを考え(ブラックボックス化すると面倒なので) 関数化はしないでおく*2
切り捨て桁(dp)がデータより小さい場合でも 0 fill はしません

作ってはみたものの、今のところ使い途がない気がしている……

mynum <- -0.052745
dp <- 3 # decimal places 小数点以下
# dp <- 9
mynumchar <- as.character(mynum)
if(mynum < 0) {
    minusvalue <- 1
    mynum <- round(-1 * mynum)
} else {
    minusvalue <- 0
    mynum <- round(mynum)
}
if( (mydigit <- log10(mynum)+1) < 0 ){ mydigit <- 1 }
mynum <- as.double(substr(mynumchar, 1, (minusvalue+mydigit+dp+1)))
# -0.052 になる 
# dp <- 9 のときは元の -0.052745 になる

文字列

文字列の一致を検査:!is.na(match())

21 March 2018

文字列が一致のときは、match が integer の 1 を返す
文字列が不一致のときは、match が integer の NA を返す
NA は FALSE の代りにはならないので、is.na() を利用

if(!is.na(match(myed1, myed2)){
    # 一致したときの処理をココに
}

文字列の表示:cat()

21 March 2018

cat は concatenate (結合、連結)であって猫ではない(← お約束事として書いておく)

cat("\n
All Data: Courtship Latency > 4
\n")

文字を置換:sub() gsub()

23 March 2018

mystring は、list でも、dataframeの要素でもよい
gsub は、同じ文字列に繰り返し適用
正規表現が使えるらしい

mystring <- sub("Re", "", mystring)
mystring <- gsub("-", "/", mystring) # - を / に変える
mystring <- gsub(".", "", mystring) # 全ての文字を消す

paste()関数

20 July 2019

文字列の結合をするにはこれ
cat ではない!
デフォルトのセパレータは空白。指定するときは、sep= で

paste("char1", "char2", "char3", "char4")
# "char1 char2 char3 char4"
paste("char1", "char2", "char3", "char4", sep="")
# "char1char2char3char4"

list()

20 July 2019

様々な object を格納できる。入れすぎると使い勝手は悪くなるけども。
下の例では、2×2分割表のデータと検定結果を格納

mydata <- matrix(c(4,6,3,4), nr=2)
library(exact2x2)  #fisher.exact()
library(Exact)     # exact.test()
library(DescTools) # GTest()
mylist <- list(mydata,
               fisher.exact(mydata,midp=TRUE),
     	   	fisher.exact(mydata),
     		fisher.test(mydata, workspace=20000000),
     		exact.test(mydata, to.plot=FALSE), # Barnard's exact test
     		chisq.test(mydata),
     		chisq.test(mydata, correct=FALSE),
     		GTest(mydata,correct="williams"),
     		GTest(mydata) # correction is NOT in default
              )

出力

ファイル出力:sink()

21 March 2018
sink("out.txt")
# この部分のコマンドの結果がファイル出力される
sink()

pdf出力:pdf()

21 March 2018

サイズを黄金比 \(\left(1:\frac{1+\sqrt{5}}{2}\right)\) にしてみた

pdf("myout.pdf", width=(7*(1+sqrt(5))/2), height=7, pointsize=5)
# この部分の描画の結果が出力される
dev.off()

表形式の出力:write.table()

20 July 2019

データなどをダブルクォーテーションで囲まず、タブ区切り、 カラム名と行名入り、上書き

write.table(
    mydata,
    "myout.txt",
    quote=FALSE,  # ダブルクォーテーションで囲まない
    sep="\t",
    row.names=TRUE,
    col.names=TRUE,
    append=FALSE  # 上書き
           )

ほかの関数

例外処理:try() tryCatch()

20 July 2019

何らかの関数がエラーが出る場合を含むとき、 そこで処理が止まってしまうと困る、 そんなときに

try(何らかの関数)
tryCatch(
         {何らかの関数}
         , error = function(e){return("")}  # e にはエラーメッセージが格納されている
	 ) 

ESS

Emacs Speaks Statistics:Emacs で R を使う
Emacs には後からインストールをする必要あり
install-memo5.1を参照

ESS起動

03 Oct 2005
M-x R

コマンド入力後

C-c C-j
C-m (改行)

で、1行ずつコマンドを実行する。

コマンドメモ

30 March 2004
> q() ← quit
> source("commands.R")  ← コマンドを書き込んだソースを読み実行
> sink("out.txt") ← ファイルに出力
> sink() ← 出力をコンソールに戻す
> objects() ← 現在あるオブジェクトを表示
> mydata <- read.table("data.txt", header=TRUE) ← ファイルからデータを読み込む
> library(ctest) ← ライブラリを使う
> t.test(A, B) ← t検定(unpaired)。※ A、Bにはデータを入れておく
> var.test(A, B) ← F検定
> t.test(A, B, var.equal=TRUE) ← t検定、等分散
> wilcox.test(A, B) ← U検定(=Wilcoxon test)
> ks.test(A, B) ← Kolmogorov-Smirnov test
> getwd() ← working directoryの表示
> setwd("c:/cygwin/home/tomaru/stats") ← working directoryの変更

追記 12 July 2013

> length(X) ← データの数
> mean(X) ← 平均
> sd(X)/(length(X)^0.5) ← 標準誤差

追記 22 February 2015

> help.start() ← htmlヘルプを起動

コマンドラインで利用する(Windows)

05September2013

cygwin shell または、コマンドプロンプトで

rscript command.R
rscript command.R & ← バックグラウンドで実行する場合

※ pathを通しておかなければなりません(MS-DOS!のようですが)。

参考:R の入出力画面を経由せずに実行:他のプログラムからの呼び出し

Rのリンク

Today:1Yesterday:2Total:1900 since 21 July 2019

*1 そもそも、そんな微妙なデータでものを言うのは危ないので避けるべき。サンプルサイズを増やすか、データの取り方を考え直すかなどすべき
*2 コピー&ペーストのミスの可能性は高まるので注意は必要

トップ   編集 凍結 差分 バックアップ 添付 複製 名前変更 リロード   新規 一覧 単語検索 最終更新   ヘルプ   最終更新のRSS
Last-modified: 21 Jul 2019 (日) 10:21:37 (1712d)