#author("2019-07-21T10:21:37+09:00","","") #contents * Rの基本的な機能 & tips [#je115281] ** R 本体(Windows版)のアップデート [#jb05f73b] RIGHT:22 October 2017 [[Updating R from R (on Windows) – using the {installr} package>https://www.r-statistics.com/2013/03/updating-r-from-r-on-windows-using-the-installr-package/]]~ [[Windows用Rのバージョンアップ>http://d.hatena.ne.jp/ryamada/20140522/1400554341]] install.packages("installr") library(installr) updateR() ** Object の調査:str() [#l844a153] RIGHT:21 March 2018 str() 関数はいろいろできるらしいのだけれど…… str(obj) ** 数の扱い [#qcb24dbc] *** 二進数 digitsBase() [#dfd4d46b] RIGHT: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() [#x92342f2] RIGHT:23November2013 > sample(0:20,3) [1] 0 11 6 0から20のうちランダムに3つの数字を重複せずに取り出す *** 数値の切り捨て [#dd710a0a] RIGHT:21 March 2018 万能ではないかもしれない~ さらに、これは、車輪の再発明になっているかもしれない (が、round down が見つけられなかったのよ) sprintf を使うと、round されてしまう~ 統計量は round ではなく切り捨てがよいことも多いので (四捨五入したら有意になってしまうかもしれない((そもそも、そんな微妙なデータでものを言うのは危ないので避けるべき。サンプルサイズを増やすか、データの取り方を考え直すかなどすべき)))、 文字列の操作とすることにして round down を実現する~ 文字数を数えて、最終的な文字列の長さを決める~ 元々の小数点以下桁数がわからないものを、小数点以下 dp桁に切り捨てる~ マイナス記号が付くと文字列が長くなるので……~ 関数化しておくとよいのはわかるけれど、 後々のメンテナンスを考え(ブラックボックス化すると面倒なので) 関数化はしないでおく((コピー&ペーストのミスの可能性は高まるので注意は必要))~ 切り捨て桁(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 になる ** 文字列 [#a747c8b5] *** 文字列の一致を検査:!is.na(match()) [#y9bdb470] RIGHT:21 March 2018 文字列が一致のときは、match が integer の 1 を返す~ 文字列が不一致のときは、match が integer の NA を返す~ NA は FALSE の代りにはならないので、is.na() を利用~ if(!is.na(match(myed1, myed2)){ # 一致したときの処理をココに } *** 文字列の表示:cat() [#i2f43c4a] RIGHT:21 March 2018 cat は concatenate (結合、連結)であって猫ではない(← お約束事として書いておく) cat("\n All Data: Courtship Latency > 4 \n") *** 文字を置換:sub() gsub() [#wb40a0fa] RIGHT:23 March 2018 mystring は、list でも、dataframeの要素でもよい~ gsub は、同じ文字列に繰り返し適用~ 正規表現が使えるらしい~ mystring <- sub("Re", "", mystring) mystring <- gsub("-", "/", mystring) # - を / に変える mystring <- gsub(".", "", mystring) # 全ての文字を消す *** paste()関数 [#yd668da7] RIGHT:20 July 2019 文字列の結合をするにはこれ~ cat ではない!~ デフォルトのセパレータは空白。指定するときは、sep= で paste("char1", "char2", "char3", "char4") # "char1 char2 char3 char4" paste("char1", "char2", "char3", "char4", sep="") # "char1char2char3char4" *** list() [#x379afb8] RIGHT: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 ) ** 出力 [#y4a37c9a] *** ファイル出力:sink() [#wfe082b3] RIGHT:21 March 2018 sink("out.txt") # この部分のコマンドの結果がファイル出力される sink() *** pdf出力:pdf() [#lb11e9db] RIGHT: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() [#c64c4c66] RIGHT:20 July 2019 データなどをダブルクォーテーションで囲まず、タブ区切り、 カラム名と行名入り、上書き write.table( mydata, "myout.txt", quote=FALSE, # ダブルクォーテーションで囲まない sep="\t", row.names=TRUE, col.names=TRUE, append=FALSE # 上書き ) ** ほかの関数 [#t88166c4] *** 例外処理:try() tryCatch() [#hf25441b] RIGHT:20 July 2019 何らかの関数がエラーが出る場合を含むとき、 そこで処理が止まってしまうと困る、 そんなときに try(何らかの関数) tryCatch( {何らかの関数} , error = function(e){return("")} # e にはエラーメッセージが格納されている ) *ESS [#uf310d46] Emacs Speaks Statistics:Emacs で R を使う~ Emacs には後からインストールをする必要あり~ [[install-memo5.1]]を参照 ** ESS起動 [#nc982a71] RIGHT:03 Oct 2005 M-x R コマンド入力後 C-c C-j C-m (改行) で、1行ずつコマンドを実行する。 *コマンドメモ [#w5e24b5d] RIGHT: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) [#v5430009] RIGHT:05September2013 cygwin shell または、コマンドプロンプトで rscript command.R rscript command.R & ← バックグラウンドで実行する場合 ※ pathを通しておかなければなりません(MS-DOS!のようですが)。 参考:[[R の入出力画面を経由せずに実行:他のプログラムからの呼び出し:http://takenaka-akio.org/doc/r_auto/chapter_14.html]] *Rのリンク [#fd0daed0] - [[RjpWiki>http://www.okada.jp.org/RWiki/]] |Today:&counter(today); |Yesterday:&counter(yesterday); |Total:&counter(); since 21 July 2019|