|このページについて|
''概要'':このページでは、「かなり基本的なコマンドなので、特にマニュアルにも載らないが、知っているといろいろ便利な小技を集める」ということをスローガンとします。


''親ページ'':このページの親ページは[[R]]です。


|目次|

#contents
----

 

*有用な目立たない関数 [#b88622e1]

**行列からNAを取り除く [#k2bfdd94]

~
数値(整数4桁、小数3桁)からなるデータフレーム、またはマトリックス中にデータが無いことを示す「NA」が行中、または列中の特定箇所に含まれてしまっている様な場合、その「NA」を含む、行、列を除き、「NA」を含まない、純粋な数値からなるデータフレーム、またはマトリックスを抽出したい.


 > # 例を作る
 > x <- matrix(1:30, 5, 6)
 > x[1,2] <- x[3,4] <- x[4, 6] <- NA
 > x
      [,1] [,2] [,3] [,4] [,5] [,6]
 [1,]    1   NA   11   16   21   26
 [2,]    2    7   12   17   22   27
 [3,]    3    8   13   NA   23   28
 [4,]    4    9   14   19   24   NA
 [5,]    5   10   15   20   25   30
 > # 適用   わずかにこれだけ
 > y <- x[!is.na(rowSums(x)), !is.na(colSums(x))]
 > y
      [,1] [,2] [,3]
 [1,]    2   12   22
 [2,]    5   15   25
-x[complete.cases(x),complete.cases(t(x))] というのもあり 


 > x[complete.cases(x),complete.cases(t(x))]
      [,1] [,2] [,3]
 [1,]    2   12   22
 [2,]    5   15   25
後者の方が効率がよいらしい.
 > x <- matrix(1:30, 5, 6)
 > x[1,2] <- x[3,4] <- x[4, 6] <- NA
 > system.time(for(i in 1:100000) y <- x[!is.na(rowSums(x)), !is.na(colSums(x))])
            user          system           total   user.children system.children 
          24.156           0.480          27.397           0.000           0.000 
 > system.time(for(i in 1:100000) z <- x[complete.cases(x),complete.cases(t(x))])
            user          system           total   user.children system.children 
           4.914           0.087           5.540           0.000           0.000 
行列のサイズにも依存する?
 > x <- matrix(rnorm(1000000), 1000, 1000)
 > x[sample(1000,50),sample(1000,50)] <- NA
 > system.time(for(i in 1:100) y <- x[!is.na(rowSums(x)), !is.na(colSums(x))])
            user          system           total   user.children system.children 
          27.518           2.444          32.602           0.000           0.000 
 > system.time(for(i in 1:100) z <- x[complete.cases(x),complete.cases(t(x))])
            user          system           total   user.children system.children 
          25.149           4.482          32.726           0.000           0.000 


**dataハンドリングをすべてRの中で行う(エクセルに頼らない) [#yee9f54e]

 edit.data.frame
 package:utils 

 data.entry
 package:utils 
 
 fix
 package:utils 

[[http://finzi.psych.upenn.edu/R/doc/manual/R-data.html:http://finzi.psych.upenn.edu/R/doc/manual/R-data.html]]を参考に。

 {Rcmdr}

が関連するようである。例えば、

 showData()
 
とか。

 write.table()

 edit()

とか。ここら辺はヘルプでもみましょう。

 write.matrix()
 {MASS}

も有用っぽい.

参考:
-[[http://cse.naro.affrc.go.jp/takezawa/r-tips/r/45.html:http://cse.naro.affrc.go.jp/takezawa/r-tips/r/45.html]]
-[[http://cran.r-project.org/doc/manuals/R-data.pdf:http://cran.r-project.org/doc/manuals/R-data.pdf]]
-[[http://www.okada.jp.org/RWiki/index.php?%A5%C7%A1%BC%A5%BF%A5%D5%A5%EC%A1%BC%A5%E0Tips%C2%E7%C1%B4:http://www.okada.jp.org/RWiki/index.php?%A5%C7%A1%BC%A5%BF%A5%D5%A5%EC%A1%BC%A5%E0Tips%C2%E7%C1%B4]]

 

**lsという関数が有用 [#ba271b80]

 >ls()

とやると、自分がどんなオブジェクトを定義したか、一覧が見られます。lsはListの略です。

**rmという関数が有用 [#v0b13ca9]

 >rm()

とやると、自分が定義したオブジェクトを消すことが出来ます。rmはRemoveの略です。



**すべてのオブジェクトを消去する方法 [#j813cd85]
RGui→"その他"→"すべてのオブジェクトの消去"
混乱しないためには、新しい作業スペースを使うほうがいいかもしれませんが。

**Iという関数が有用 [#q3aa9601]

 lm(x~y)
 lm(x~y^2)
の二つは、同じ結果を返す。
 lm(x~I(y^2))
とやると、ちゃんと二乗したものを説明変数とみなしてくれる。



**search()が有用. [#e4d431f1]

現時点でインストールされており,かつ,読み込まれているパッケージの一覧.

 search()   



**namesという関数が有用。 [#fc37c0fa]

[[Rを使って計量経済分析]]の例でいうと、
 > summary(lm(I ~ Y + r1))->fit
 > names(fit)


とやれば
 [1] "call"          "terms"         "residuals"     "coefficients"  "aliased"       "sigma"        
  [7] "df"            "r.squared"     "adj.r.squared" "fstatistic"    "cov.unscaled" 




 attr()
 attributes()

 structure()

なども参照.
 
**strという関数が有用。 [#m4df6534]
 

[[Rを使って計量経済分析]]の例でいうと、
 > summary(lm(I ~ Y + r1))->fit
 > str(fit)
とやると

 List of 11
  $ call         : language lm(formula = I ~ Y + r1)
  $ terms        :Classes 'terms', 'formula' length 3 I ~ Y + r1
   .. ..- attr(*, "variables")= language list(I, Y, r1)
   .. ..- attr(*, "factors")= int [1:3, 1:2] 0 1 0 0 0 1
   .. .. ..- attr(*, "dimnames")=List of 2
   .. .. .. ..$ : chr [1:3] "I" "Y" "r1"
   .. .. .. ..$ : chr [1:2] "Y" "r1"
   .. ..- attr(*, "term.labels")= chr [1:2] "Y" "r1"
   .. ..- attr(*, "order")= int [1:2] 1 1
   .. ..- attr(*, "intercept")= int 1
   .. ..- attr(*, "response")= int 1
   .. ..- attr(*, ".Environment")=length 8 <environment> 
   .. ..- attr(*, "predvars")= language list(I, Y, r1)
   .. ..- attr(*, "dataClasses")= Named chr [1:3] "numeric" "numeric" "numeric"
   .. .. ..- attr(*, "names")= chr [1:3] "I" "Y" "r1"
  $ residuals    : Named num [1:105]  -1.79  -6.04  -7.57 -10.49 -13.88 ...
   ..- attr(*, "names")= chr [1:105] "1" "2" "3" "4" ...
  $ coefficients : num [1:3, 1:4]  7.821  2.090 -1.535  2.519  0.244 ...
   ..- attr(*, "dimnames")=List of 2
   .. ..$ : chr [1:3] "(Intercept)" "Y" "r1"
   .. ..$ : chr [1:4] "Estimate" "Std. Error" "t value" "Pr(>|t|)"
  $ aliased      : Named logi [1:3] FALSE FALSE FALSE
  ..- attr(*, "names")= chr [1:3] "(Intercept)" "Y" "r1"
  $ sigma        : num 5.65
  $ df           : int [1:3] 3 102 3
  $ r.squared    : num 0.458
  $ adj.r.squared: num 0.448
  $ fstatistic   : Named num [1:3]  43.2   2.0 102.0
   ..- attr(*, "names")= chr [1:3] "value" "numdf" "dendf"
  $ cov.unscaled : num [1:3, 1:3]  0.19893 -0.00458 -0.02355 -0.00458   0.00187 ...
   ..- attr(*, "dimnames")=List of 2
   .. ..$ : chr [1:3] "(Intercept)" "Y" "r1"
   .. ..$ : chr [1:3] "(Intercept)" "Y" "r1"
  - attr(*, "class")= chr "summary.lm"



**summaryとかsummary.lsとかpredict.lsとか [#s7f574a4]

[[ここ:http://www.okada.jp.org/RWiki/index.php?cmd=read&page=R%A4%CE%C5%FD%B7%D7%B2%F2%C0%CF%B4%D8%BF%F4Tips&word=summary.lm]]を見ましょう。








**methods{utils} [#dd7b62d7]

[[RjpWikiのこのページ:http://www.okada.jp.org/RWiki/index.php?cmd=read&page=%C3%CE%A4%C3%A4%C6%A4%A4%A4%EB%A4%C8%A4%A4%A4%C4%A4%AB%CC%F2%A4%CB%CE%A9%A4%C4%28%3F%29%B4%D8%BF%F4%C3%A3&word=usemethod]]の「関数のソースコードを見る、methods(), getS3method() 関数 -- from r-help, 2005.01.18」をみよ。

たとえば、kfilter{sspir}の中身を見たい場合、

 > kfilter
 function (ss) 
 {
     UseMethod("kfilter")
 }
 <environment: namespace:sspir>

としか表示されない。中身を知るために、

 > methods(kfilter)
とやれば
 [1] kfilter.SS  kfilter.ssm

を得る。だから、

 > kfilter.SS
とか

 > kfilter.ssm
とか入力すれば関数の中身が見られる。




ところが、tsls(sem)の場合、


 > tsls
 function (y, ...) 
 {
     UseMethod("tsls")
 }
 <environment: namespace:sem>

となるので、

 > methods{tsls}
と入力しても
 [1] tsls.default* tsls.formula*
 
    Non-visible functions are asterisked
となって中身が隠蔽されている。

そこで、

 > getS3method("tsls", "default") 



 > getS3method("tsls", "formula") 

とすればやっと中身が見られる。

ちなみに、kfilterの場合でも

 > getS3method("kfilter","SS") 
とか

 > getS3method("kfilter","ssm") 
やっても同じ結果を得られる。



**system.time () {base} [#u1804d40]

-time() {base}


**色コード [#t8290469]

 colors()

[[RwpWikiの"Rにおける色の名前":http://www.okada.jp.org/RWiki/index.php?R%A4%CB%A4%AA%A4%B1%A4%EB%BF%A7%A4%CE%CC%BE%C1%B0]]も参照。



*グラフィック関連 [#yf112fe0]





**グラフィック一般 [#ycb20378]

[[RwpWikiの"Rのグラフィックスパラメータ ":http://www.okada.jp.org/RWiki/index.php?R%A4%CE%A5%B0%A5%E9%A5%D5%A5%A3%A5%C3%A5%AF%A5%B9%A5%D1%A5%E9%A5%E1%A1%BC%A5%BF]]によくまとまっています。





**二つの図を同じwindowの中に分割して表示 [#hd724da8]

グラフィックスパラメータ指定関数

 par() 

を使います。




**3Dプロット [#oa1b4e05]

 persp

を使えばよいです。これを使う際に注意点は、以下の例を参照。

 > a<-1:10
 > b<-6:20
 > f<-function(x,y){x^2+y^2}
 > persp(a,b,outer(a,b,f),theta = 30, phi = 30, expand = 0.5,col="lightblue")
 > persp(a,b,outer(b,a,f),theta = 30, phi = 30, expand = 0.5,col="lightblue")
 以下にエラーpersp(x, y, z, xlim, ylim, zlim, theta, phi, r, d, scale,  expand,  : 
         'z' 引数が不正です
 > persp(b,a,outer(b,a,f),theta = 30, phi = 30, expand = 0.5,col="lightblue")
 > persp(b,a,outer(a,b,f),theta = 30, phi = 30, expand = 0.5,col="lightblue")
 以下にエラーpersp(x, y, z, xlim, ylim, zlim, theta, phi, r, d, scale,  expand,  : 
         'z' 引数が不正です

すなわち、persp(x,y,z)で、「x:x軸のベクトル」、「y:y軸のベクトル」、「z:座標(x,y)に対応するz軸の値を格納した行列。(x×y)の行列でなければならない。」ということ。


**凡例を入れる [#q92a53ed]

 x<-c(3,2,3,2,4,5,4,6,7,5,7,6,8,9,8,7,8,9)
 plot(x,type="l",main="zu",xlab="yokojiku",ylab="tatejiku")
 legend(locator(1),legend=c("NAME"),lty=c(1), lwd=c(1))


例えば,上のコマンドをそのままコピペしてRで実行してみましょう.実行後,凡例を入れたい場所をマウスでクリックすれば,そこに凡例が入ります.




**図をeps形式で保存 [#a061799a]

文字化けする,という人は[[ここ:http://www.okada.jp.org/RWiki/index.php?%A3%D1%A1%F5%A3%C1%20%28%BD%E9%B5%E9%BC%D4%A5%B3%A1%BC%A5%B9%29#content_1_3]]を見ましょう.

あるいは,[[ここ:http://www.sugi-shun.com/mt/2006/09/rps.html]]も参照.


**図をPDF形式で保存 [#zb92afb4]

コマンド例を挙げておく.

例1
 pdf("myfile.pdf")
 plot(rnorm(100))
 dev.off()

例2

 N<-10
 i<-0:10
 p<-0.6
 
 pdf("myfile1.pdf")
 
 ypdf<-dbinom(i,N,p)
 Title<-"Binomial Probability distibution with n=10 and p=0.6"
 barplot(ypdf, xlab = "x", ylab = "P(X=x)",main=Title)
 
 dev.off()


参考:[[http://people.su.se/~ma/R_intro/node47.html:http://people.su.se/~ma/R_intro/node47.html]]

*データをcsv形式などで保存 [#aa1cab00]

 write.table(X,"test.csv",sep=",")

などとすれば,R内でXと定義されているデータが,test.csvというファイル名で保存される."test.txt"などでも良い.sep=","とやったほうがExcelなどでの扱いが容易となる.




*Rで数学 [#w0a9efbd]

**微分 [#u42f4b3d]

 D(expression(x^2),"x")
 D(D(expression(x^2),"x"),"x")


**整数部分を取り出す [#m5dfa2a5]

 x <- pi * c(-1:1,10)
        as.integer(x)


*Reference [#sf396c74]
**参考書籍 [#qe849ace]

-[[The R Tips―データ解析環境Rの基本技・グラフィックス活用集:http://www.amazon.co.jp/gp/product/486167039X/ref=pd_bxgy_img_b/249-0823452-2558734?ie=UTF8]]
**リンク [#oc0c672b]
特になし


トップ   編集 差分 バックアップ 添付 複製 名前変更 リロード   新規 一覧 検索 最終更新   ヘルプ   最終更新のRSS