Rの開発環境

サラリーマン時代に、『上司は思いつきで物を言う』なんて本を読んで憂さを晴らしたものだ。 そして、もうこの手の本のご厄介になる事は無いんだなと思ってたんだ。だけど、最近、

『女房は思いつきで物を言う』現象に見舞われて、おろおろしてる自分が居る。一生続くんだろうな。

見たい番組が同時刻にやってるーーー、って声が上がりました。録画機を取り付けろとご下命。 今のTVは、エコポイントに釣られて買って、その時録画機もエコポイントで手に入れようと したら、何故かポイントがすき焼き肉に化けちゃっていたのです。

それが今頃になって復活するとは、えらい遅延評価だな。ぶつくさ言ってもしょうがないので、 家から一番近いヤマダ君の所へ行きましたよ。何の下調べも無く。

それにしても時期が悪いな。HDDはタイ洪水の余波をまだ引きずって高止まりなんでしょうか。 そして3月の帳尻合わせ決算セールが終わったこの時期です。どうせHDDなんて消耗品なんだし 一番安いのをと思ったら、在庫が有りませんですって。しょうがないので、次に安いのを 買ってきた。1Tあれば、80時間は録画出切るのね。初めて知りましたよ。

HDDの箱には、TVとパソコン用、直ぐに使えますって書いてあった。近頃のやつはAV目当ての ものなのね。説明書には、各メーカー別のTVへの接続方法が載ってた。それによると、シャープ さんのは、特殊フォーマットになりますってさ。

これって、Windows世界では否通用なフォーマットなんだな。TVの中身はどうせLinuxだろうから EXT3かな? 後でLinuxにつなげてマウント出切るか確認してみよっと。

ぶっつけ本番で録画しました。無事に観賞できました。胸を撫で下ろしましたよ。

で、ちょっと気になった事をば。たまにTV画面に『このHDDは不正な方法で取り外されました。HDD が破損してる可能性が有ります。』って、警告が出てくる。最初この警告が出るタイミングが 分からなかった。

女房が言うには、炬燵の電源を切ると出るって言うので、再現実験したら、正にその通りでした。 昔の仕事を思い出しちゃいましたよ。まれに誤動作する機械を修理しおうと客先に泊り込み。 そういう時に限って、現象が発現しないんだよなぁ。ほとほと困り果てていた時に、現場のおばさんが一言。 蛍光灯を点けるとおかしくなるみたい。おいらはこの一言に救われましたねぇ。女の勘って凄いな (人によっては、怖い?)

どこからノイズが飛び込むんだろう?安いHDDなんで付属してるUSBケーブルがシールド無しなん かな? やけに細いぞ。それで、ノイズがUSBケーブル兼アンテナ線に飛び込んで、アホな USBドライバーが、USBが不意に取り外されたと誤認するんだろうな。

こういう場合は、誰に文句を垂れればいいのでしょうか? シャープさんとこ?バッファロー さんとこ?電気炬燵のメーカー?

まあ、手軽に確認するには、シールド付きUSBケーブルを交換してみるか、アルミホイルででもUSBケーブルを ラップしてみる事かな。現象が確実に出るので確認は容易だな。それから文句を付けよう。 言っとくけど、モンスター・クレーマアーじゃないからね。

そうそう、シャープさんよ、HDDが破損してる可能性....って表現はどうかと思うよ。 知らない人は物理的に壊れたと思って、またヤマダ君の所へ行っちゃうじゃないですか。

Windows上のR開発環境

この所、vimに首ったけと言う訳でもないけど、いきがかり上、統計言語Rをvimから 使えるようにしておきたい。だって、前回のRcmdrは、定食みたいで、遊ぶには 不自由な所が有るからだ。

早速vim用のプラグインを探してみたら、どうも Vim-R-pluginってのが一択みたいだ。 入れる鹿。あらかじめ調べておいたRの在り処を教えておかないと、エラーするよって件の対処を、 _vimfilesに書いておいた。

let vimrplugin_r_path='C:\Program Files\R\R-2.13.0\bin\i386'

これだけで済むかと思ったら、Rとvimが連携するには、pywin32が必要になるとかで、 http://sourceforge.net/projects/pywin32/ へ行って、対応するPythonのバージョンに合わせたものを取ってきて入れておく。今までvim用に 数々のプラグインを入れてきたけど、Pythonが当たり前に使われているってのを実感するなあ。

これで準備完了。test.Rなんてファイルをvim上に作ると、メニューにひっそりと R なんて 言う項目が生えてくる。一文字じゃ目立たないよな。\rf とやると、Rのコンソールが起動。 後は、\aaで、ファイルの内容をコンソールに送り付けて実行されるって寸法。

Rのコンソール上で、help(hoge)とか、?hoge ってやると、ブラウザーが起動してHelpが見られる んだけど、ブラウザーがうざい。そんな時には、.Rprofile に

options(pager = "vim -c 'set ft=rdoc' -")

と、書いておくと、vim上でHelpが見られて、とっても快適。勿論、オムニ補完が使えるので 便利なのは言うまでもない。

quickrun de R

FreeBSD側にもRが入っているんだけど、vimから使いたいな。Vim-R-pluginを入れてもいいんだけど、 どうも、Xが立ち上がっていないと動かない予感。だったら、前にやったQuickRunでいいかな。

QuickRunのサポート言語を調べてみると、ちゃんとRも対応してる。偉いぞQuickRun。 早速試運転って事で、

x <- seq(0, 1, 0.1)

なんて言う、test.Rを作って、:QuickRun r するも、何も出てこない。はてな? 出力が無いと 画面が割れないのかな。print(x) を後ろに尽けてあげたら、画面が出てきた。

と言う事で一件落着にしてもいいのだけど、いちいちvimのコマンドラインから :Quickrun r って やるのメンドクサイな。\r で、Rが動いて欲しいぞ。でもそれが動かんのだ。

ふと思い出して、.Rってサフィックスが QuickRunの起動キー r に対応してるかと調べて みると(/usr/local/share/vim/vim73/filetype.vim)

" R (Splus)
if has("fname_case")
  au BufNewFile,BufRead *.s,*.S,*.R             setf r
else
  au BufNewFile,BufRead *.s                     setf r
endif

Splus用の*.S は、定義されたけど、*.R が漏れていたので、上記のように追加したよ。R言語の サフィックスって、.Sが世の中の標準なんですかね?

なんて事を思っていたら、少し下の方に

" Rexx, Rebol or R
au BufNewFile,BufRead *.r,*.R                   call s:FTr()

func! s:FTr()
  let max = line("$") > 50 ? 50 : line("$")

  for n in range(1, max)
    " Rebol is easy to recognize, check for that first
    if getline(n) =~? '\<REBOL\>'
      setf rebol
      return
    endif
  endfor

  for n in range(1, max)
    " R has # comments
    if getline(n) =~ '^\s*#'
      setf r
      return
    endif
    " Rexx has /* comments */
    if getline(n) =~ '^\s*/\*'
      setf rexx
      return
    endif
  endfor

  " Nothing recognized, assume Rexx
  setf rexx
endfunc

サフィックスで、言語の種類を判定するって微妙だな。大体、一文字のサフィックスが何考えてる んかなと思っちゃうけどな。(そんじゃ、3文字だったらどうよって言われたら、返答しようが ないけど)ついでに文句垂れると、一文字の言語(R、お前の事だよ)って、検索が難しい んだよな。そんで、R関係を検索する時は、統計r を付けてるよ。あるいはR専用の検索サイト、 http://seekr.jp/へ行くかだな。

REBOLの検出は簡単よ。Rだったら # ってコメントが入ってるでしょ。RexxならC風の コメントが入ってるでしょ。(まあ、50行も見れば、普通の人なら一つぐらいコメント入れてるよ と、淡い期待が滲み出ています) どっちでもなかったら、もうRexxにしちゃえって。そんなに Rexxって 世の中にのさばっているんですかね?(まあ、天下のIBM様、、、以下自粛)

Rのお勉強

まあ、上記はRを使う為の準備な訳であるけど、Rがどんなものかを知るには、 R基本統計関数マニュアル とか、 勉強会発表内容一覧 とか R、R言語、R環境・・ あたりを見ればいいのかな。

もっと一般的には、 統計学入門 かなあ。でも、より身近に感じる統計って事で、自分の身体性を統計にかけてみよう。 好きな人はJRAあたりからデータを取ってきて、自分の勝ち負けを統計してみるのが、 正しい勉強方法です。

Rにデータ取り込み

自分の身体性って事で、去年から取っている血圧データを使ってみる。とは言っても、Pythonの 辞書の中にしかデータが存在しないので、CSVでダンプするように、去年作ったスクリプトに ちょいとルーチンを追加した。

def csv(v=''):
    global yy
    td = sel(v)
    with open('zOUT.csv', 'w') as ou:
        for k in td:
            csv = yy + k + ',' + dat[k] + '\n'
            ou.write(csv)

出力ファイル名が、決めうちだけど、まあいいか。

120101.04,118,73,57
120101.21,109,70,71
120102.04,128,82,60
120102.21,105,62,67
  :

今年の元旦の朝4時台の(高)血圧は118で、(低)血圧は73、脈拍は57ってような データが出てきた。日付のフォーマットは、"%y%m%d.%H" だな。

Rcmdrを使う

データメニューからデータのインポートを選んで、R側にデータを取り込む。この時、データセットに 独自の名前を付けられるので、今回はMyって付けてみた。 続いて、データセットの編集を選んで、それぞれの列に名前(when,hi,low,pls)を付けておく。

血圧と脈拍に相関があるか、確認してみる。統計量の要約から相関を選べばよい。

> cor(My[,c("hi","low","pls")], use="complete.obs")
            hi        low        pls
hi   1.0000000  0.7048874 -0.4755432
low  0.7048874  1.0000000 -0.5219339
pls -0.4755432 -0.5219339  1.0000000

これを見ると、高血圧と低血圧には正の相関があるって言ってる。血圧と脈拍には負の相関が あるんだな。

もっと図式的に見たかったら、グラフから散布図行列を選べばよい。こちらの方がより鮮明に 相関が分かるな。簡単に分析出来ていいな。

この測定データは、いわゆる時系列データ(タイムシリーズデータ)なんで、何とかして 時系列データに落とし込みたい。

調べてみると、時系列データのプロット・続 なんてのがヒットした。でも、これだと時間は扱えない。はてなと思って調べたら、 as.POSIXct なんてのが使えるのかな。

> tmp <- My$when
> ctmp <- as.character(tmp)
> My$when <- as.POSIXct(ctmp, tz="", "%y%m%d.%H")
> aaa <- as.ts(My)
> class(aaa)
[1] "mts" "ts" 

続きはWebで。って、CMみたい。

おまけ

Rはschemeが底辺で動いていると思うんだけど、はっきりCLを使って統計だぜぃってやつもあるのね。

CL Machine-Learning

もう一つのおまけは、エイプリル・フール?で見つけた和文モールスに対抗する欧文モールス入力です。 和文の方は、電鍵バージョンで1級アマチュアぐらいの年期が入った人でないと使いこなせない 感がしたけど、今度のはパドル(2接点)もどきです。

名前はGmail Tapって言うらしい。 CQ出版と東北の某メーカーが企画したペガサスキーのソフト版と言ったら分かりやすいかな。 (CQ誌見てる人しか意味不でしょうけど)

ここまでやるなら、エレキー機能も組み込んでね。そうすれば入力がずっと楽になるのに。でも、 こんな問題が、、、

From: [777] 名無しさんから2ch各局… <sage>
Date: 2012/04/03(火) 10:24:07.48
-----
リグがなくて、ボールペンでテーブル叩いて「CW」でQSOしたこともありますよ
アイボールというやつですが
-----
QSOの定義は、電磁波
それはQSOではない 音波だろ
-----
QSLカードのBAND欄の記載内容が気になる
------
500Hz付近(音波)

アンドロドロイドはWi-Fi接続だと2.4Gかな?それとも5G帯? まあ、どっちでもいいんだけど。

で、ちょっとした悩みがあって、それは、 さすがググル様、アンドロドロイド版しかないのが残念って事。だってさ、女房の思いつきモードが 激しく発動中で、ipad2を検討させられているんだもん。ipad2にフロントエンドを付けて、SDR って出来ないものかしらん? スマホでちまちまとやるより、よっぽど老人御用達の受信器に なると思うんだけど。