「学会」タグアーカイブ

auto-complete.elを拡張するR用のelisp書いた

※20090608追記:以下に書いているelispはさらに拡張されバージョンアップしています。詳しくは、auto-complete.elを拡張するR用のelispをさらに拡張してみた。をご覧ください。

Rでコードを書くときは、もっぱらESS on emacs(meadow)で、すこぶる便利に使わせてもらっているのですが、唯一不満な点が補完でした。abbrev、dabbrevといちおあることはあるのですが、補完候補が何かコマンドを押さないと出てこないし、しかも補完候補がすごく見にくい。

実は、昔perl書くときに使っていたxyzzyはsiteinit.lにごにょごにょすると、この問題はあっさり解決してしまうわけで。

ミニバッファの補完候補リストをチップヘルプにする

この機能になれていたというのもあって、emacsの補完のしょぼさはかなり苦痛でした。といいながらもESSの便利さに負けてしまい、xyzzyはサブのエディタに降格してしまったわけですが・・・

んで、学会終わって余裕もできたので、たまにはemacsの環境整理でもしてみるかと、Rjpwiki見てたら谷村さんから次のようなコメントが・・・

ESSのメーリングリストにも投げたのですが、便利すぎるauto-complete.elのR用拡張って誰か書いていませんか。rubyとかc++用の拡張のみならず、octave用の拡張も書かれているのに、R用のものがまだありません。私家版ですでに書いている人がいれば、是非公開してみてください。auto-complete-modeが初耳の方はDemoを見てみてください。ESSのR-modeで使ってみましたが、便利すぎます。後はあらかじめキーワードなどをリストアップした拡張を作れば、さらに便利になるのですが。。。 — 谷村 2009-03-04 (水) 12:02:57

そもそもauto-complete.el自体を知らなかったので、調べてみるとなんかxyzzyの補完候補リストみたいなものを出してくれるんだそうな。しかも容易に拡張可能ですでに各種言語の拡張やoctaveの拡張まで出てるんだそうな。詳しくは動画デモを見てもらえるとその便利さがわかってもらえると思うです。後、以下のリンクも参考になります。

テキスト入力中に補完候補を自動的に表示してくれる auto-complete.el をリリースしました — ありえるえりあ
情報源による拡張が可能な auto-complete 0.1.0 をリリースしました — ありえるえりあ
auto-complete.el にやてふ拡張を作ってみた – がべこれログ – Garbage Collection Log

お~知らなかった。便利すぎるやないですか。しかし、octaveの拡張elispが出ていて、なぜRが出てないんだろう・・・

というわけで、すでにどなたか書かれているかもしれませんが、R用のauto-complete.el拡張elisp書いてみました。
ソースコードはこちらから。今回は初めてgithubにホスティングしてみました。
ちなみにスクリプトを書くにあたってauto-complete-octave.elを参考(というかほとんどまんま)をさせてもらいました。thanks Yen-Chin,Lee!!

使い方
1.auto-complete.elとauto-complete-acr.elをロードパスが通ったフォルダに起きます。

2..emacsに次の3行を追加します。

[cpp]
(require ‘auto-complete)
(global-auto-complete-mode t)
(require ‘auto-complete-acr)
[/cpp]

4.emacsでESSを起動します。
5.M-x auto-complete-modeします。

その他
・ESSモードとiESSモードのhookに引っかけています。

ソースコード見ていただくとわかるのですが、ただRの関数をリストにしてぶち込んでいるだけです。芸がなくてごめんなさい。
関数もnamespace:statsのものを取り込んだだけで、まだかなり不完全です。最初はNAMESPACEファイルを動的に読み込んでリスト化させようかと試みましたが、そこまでの芸当はできませんでした(当方lisp歴3日)。
手力でNAMESPACEファイルからリストを生成しています。NAMESPACEからlispのリスト生成に使ったpythonスクリプトも恥ずかしながらgithubに置いときます。

[python]
#!/usr/bin/env python
# -*- coding: utf-8 -*-
# NAMESPACEにある関数名をlispで使えるように変換させます。
# NAMESPACEのexpoort()の括弧内にある関数名をコピーしてファイルを指定してから使ってください。

import re
mer = []
f = open("D:RscriptessNAMESPACE")
for line in f:
line = line.strip()
mer.append(line)
f.close()
out = "".join(mer)
out = re.sub(" ","",out)
out = re.sub(‘"’,"",out)
out = re.sub(",","" "",out)
out = re.sub("^""",’"’,out)
out = re.sub("$""",’"’,out)
[/python]

ということで、このコードはgithubにてhostして凄腕lisperの方のさらなるハックを期待したい・・・なる他力本願なことを考えています。
改良したelispを作られた方いらっしゃったら、是非githubのアカウントを取ってidを教えてください。collborateしてbrunchできるようにします。
まだまだ知名度の低いgithubですが、使い出すと面白いですのでガンガンbrunch、pushしてもらえると凄くうれしいです。

後、答えられるか甚だ不安ですが、動かんぞ!!とかこんな馬鹿な書き方あるか!!みたいなお叱りはコメントでお願いします。

学会ボケできない

だいたい学会が終わると気が抜けてしまうとこがあるのですが、今回は、日曜は市内に本庁に異動になったタイゾトンの引越し手伝い。
月曜からは、職場の親睦会のお世話となかなか気が抜けない毎日です。

と言いつつ、いつの間にか新年度。早いものだ。

 そろそろ、いろいろ考えないといけない年になりそうです。

ArcGISのバージョンアップが相当腐れている件

学会も終わって一段落したので、かなり先延ばしにしていた諸々の作業を腰据えて実行中。

今回はだいぶ先延ばしにしていたArcGISのバージョンアップにチャレンジです。
ubuntuとかだとupdateで一撃なわけですが、腐れっぷり甚だしいArcGISはそうはいきません。
まず、バージョンアップの説明だけのマニュアルで27ページあります。たいていのソフトウェアでそうなようにこういった類のマニュアルは読み飛ばすのが常なのですが、このマニュアルはところどころに巧妙な罠が仕掛けられていて熟読しないと、インスコすらままならない状況になってしまいます。
というわけで、マニュアルもろくすっぽ読まなかった僕はというと、日本語化プログラムがアンインストールできない事態に・・・・
サポートにメールで聞いてみると

---------+---------+---------+-----
<質問その1>
プログラムの追加と削除からArcGIS9.2日本語版をアンインストールしようとすると
以下のエラーが出てアンインストールできません。
どうすればよいのですか?
—————————
アンインストール
—————————
INSTALL.LOG ファイルをオープンできません。
—————————
OK
—————————

<回答>
ご質問内容から判断する限りでは、既に「ArcGis9.2のSP6の日本語版プログラム」の
アンインストールは行われているものと考えられます。

プログラムの追加と削除に「ArcGis9.2のSP6 日本語版プログラム」が残っていても、
PCの動作には問題ありませんので、恐れ入りますが、そのままの状況で次の作業を
行っていただきますようお願いします。

---------+---------+---------+-----
<質問その2>
つまり、実体のファイル群は削除されていてレジストリだけ残っているということですか?
レジストリは削除しても良いのですか?

<回答>
恐れ入りますが、レジストリにエントリの情報のみが残っている状態と考えられます。

なお、レジストリの手動操作は、システムに重大な障害を引き起こすことがあります。
そのため、レジストリの削除を行うかどうかにつきましては、ユーザー様でご判断
いただきますようお願いします。
レジストリの削除により、ご使用のPCに何らかの障害が発生いたしましても、弊社では
一切の責任を負いかねますので、あらかじめご承知おきいただきますようお願いします。

以上、よろしくお願いいたします。
---------+---------+---------+-----

つまり、順番間違うとレジストリ汚したまんまになるってことね。しかも、そんまま使えっておいおい。
しょうがないので、レジストリいぢってきれいにする。
というわけで、かなりストレスのたまる仕事を強いられる。

1.旧バージョンをアンインストール
2.アンインストールに失敗。
3.旧バージョンを再インストール
4.旧バージョンをアンインストール
5.レジストリを手動で掃除
6.新バージョンを再インストール

しかも各作業には日本語化のパッチあてて、バグフィックスのパッチあてて・・とかこれまためんどくさい作業があって、しかもインストールに相当の時間(一つのプログラムインスコすんのに30分くらい)がかかります。ちなみに僕の場合は終日かかりっきり。
さらに恐ろしいことに、新しいバージョンは早速不具合解消のためのパッチが出ていて、それもあてんといかんらしい。
さらにさらに恐ろしいことにマニュアルを読み進めていくとまだ日本語化できていないとこがあるらしく、それはまだパッチもできていないらしい。

これが100万近くするソフトなのか・・・今日日フリーソフトでさえネットインストールでサクッとバージョンアップできるというのに。

QGISとかマルチプラットフォームで、多言語で、スクリプトも書けて、サクサク動いて、レジストリ登録すればバージョンアップもupdateで一発なのに。

は~なんでこんな腐れソフト買ってしまったんだろう。元を辿れば大学で初めて出会ったのがArcGISだったのがケチの付け始めだったのでせう。

大学教員の皆さん、お願いなのでこのソフトを買わないでください。大事な教え子がESRIに散々搾取されたあげく、信じがたい苦行を強いられることになります。

なんで、こんなソフトがデファクトスタンダードになりえたんだろ?
こうなるとQGISとかsupermapあたりに頑張ってESRI潰してもらう以外あるまい。

頑張って!!QGISの中の人。

森林学会から帰ってきた

今しがた、熊本に戻ってきました。
 いや、それにしても疲れた。けど、かなりモチベーションあがりました。
 日本には頑張っている研究者がたくさんいて、そういう人と話しているだけでも相当気合が入る。

 頑張らない人たちは、見ないようにすれば良いのだ。

 僕も頑張らねば。

 細かい話は、いずれあげます。

 とりあえず、今日はグテグテのため、ここまで。

生態屋という人種

ようやく、学会発表用のスライドがでけました。
 こんだけ、難産だったのは始めて。MCMCの多重ネストかけ算推定の恐ろしさも知れたしアーンド危うく主観事前分布の暗黒面にどっぷり落ちてしまうところでした。
 んで、今日はとある機関の方々と発表練習してきたのですが、正直なーんだかなーって感じ。

 要は、僕みたいな解析するとベイズって?MCMCって?なんでそんなめんどくさいことすんの?という、あーまただよこの人。という辟易する質問がやはりあるわけです。

 初めに断っておくと、生態学を扱う人すべてがそうというわけではなくて、むしろ最近では減少の傾向にある(というかあってほしい)とは思うのですが、いわゆる生態屋なる人種は、さも有意差を黄門様の印籠的に使う人が多くを占める人種です。
 んで、ちょっと変わった解析(と言っても結構使い古されている)すると、第3種の誤差炸裂みたいな。

 ベイズだのMCMCだのが、今現在メインストリームとはとても言えないっていうのはわかるし、それを使うことに対するメリットもある程度説明すべきだってことは、わかるんですけど人に指摘なりアドバイスする役職なり立場の人は表面だけでも勉強してほしいと切に願うのです。
 そして、勉強しないのならしないで、解析仕事はそれなりの人にアウトソーシングして、んで変なツッコミは入れないで欲しい。できれば査読なんかも引き受けないで欲しい。

 でないと、少なからずベイズという枠組みで一生懸命何かを見ようとしている人に対して失礼だと思うのです。
 そして、それを理解することに少なからず努力してきた僕もみじめになるのです。
 
 というわけで、久しぶりに愚痴いってみました。
 あーちょっと疲れてるね。
 

 

MCMCの神様が降りてきた

データ整理もなんとなく終わり、winbugsのコーディング。

 どうせ今から苦労するんだし、とか思って、てきとーに初期値決めてwinbugsに投げたらなんと一発で通ってしまいました。
 うれしさのあまり夜中にもかかわらず、つい奇声を発してしまった。
 
 ま、結果は明日見るとして、この調子でトントン進めばどうにかスライドも今週中にできそーな気配っす。

Rコーディング

ひたすら、Rのコードを打ち込む一日。
 とりあえず、今日書いたコードをさらしあげ。

 forの多重ネストばっかで、すごくいけてない(つまり、すんごく遅い)けど、いろいろ考える気力がおきましぇん。
 明日くらいからbugsコード書き始めたい。

[sourcecode language=’cpp’]library(R2WinBUGS)
library(coda)
library(VGAM)

setwd(“d:/【研究】強度間伐関連/強度間伐データ”)

first.dat <- read.csv("1期目実生調査.csv",header=T) first.dat$No <- as.character(first.dat$No)ed first.dat$Nokabu <- as.character(first.dat$Nokabu) first.dat$sp <- as.character(first.dat$sp) first.dat$nos <- as.numeric(first.dat$nos) first.sp <- unique(first.dat$sp) first.sp <- first.sp[first.sp !="nothing"] first.name.dat <- sort(as.character(unique(first.dat$name))) second.dat<-read.csv("2期目実生調査.csv",header=T) second.dat$No <- as.character(second.dat$No) second.dat$Nokabu <- as.character(second.dat$Nokabu) second.dat$sp <- as.character(second.dat$sp) second.dat$nos <- as.numeric(second.dat$nos) second.sp <- unique(second.dat$sp) second.sp <- second.sp[second.sp !="nothing"] second.name.dat <- sort(as.character(unique(second.dat$name))) sp <- append(first.sp,second.sp) sp <- (sort(unique(sp))) ##毎木データをプロットごとのデータフレームに分ける ##1期目のデータのループ ############################################################# ##各プロットの毎木データをそれぞれのデータフレームに分ける。 x <- 0 subplot.name.dat <- NULL for( i in 1:length(first.name.dat)){ x <- x+1 for( subID in 1:4){ each.dataframe <- subset(first.dat,first.dat$name == first.name.dat[x] & first.dat$subplot == subID ) ##assign()でプロットIDをオブジェクト名に当てる。 each.name <- paste(first.name.dat[x],subID,sep="") subplot.name.dat <- append(subplot.name.dat,each.name) assign(each.name,each.dataframe) } } ##種・プロットのクロス表を作成 ##1期目のデータのループ ############################ ##空のデータフレーム作る first.sp.dat <- NULL for(mat in 1:length(subplot.name.dat)-1){ first.sp.dat <- rbind(first.sp.dat,c(rep(0,length=length(sp)))) } rownames(first.sp.dat) <- subplot.name.dat colnames(first.sp.dat) <- sp ##各種をカウントしていくループ for( k in 1:length(subplot.name.dat)){ mod.dat <- NULL for( m in 1:length(get(subplot.name.dat[k])$name)){ mod.dat <- rbind(mod.dat,get(subplot.name.dat[k])[m,]) } for(n in 1:length(sp)){ for(p in 1:length(mod.dat$name)){ if(sp[n] == mod.dat$sp[p]){ first.sp.dat[k,n] <- first.sp.dat[k,n] + mod.dat$nos[p] }else{ } } } } ##毎木データをプロットごとのデータフレームに分ける ##2期目のデータのループ ############################################################# ##各プロットの毎木データをそれぞれのデータフレームに分ける。 x <- 0 subplot.name.dat <- NULL for( i in 1:length(name.dat)){ x <- x+1 for( subID in 1:4){ each.dataframe <- subset(second.dat,second.dat$name == name.dat[x] & second.dat$subplot == subID ) ##assign()でプロットIDをオブジェクト名に当てる。 each.name <- paste(second.name.dat[x],subID,sep="") subplot.name.dat <- append(subplot.name.dat,each.name) assign(each.name,each.dataframe) } } ##種・プロットのクロス表を作成 ##2期目のデータのループ ############################ ##空のデータフレーム作る second.sp.dat <- NULL for(mat in 1:length(subplot.name.dat)-1){ second.sp.dat <- rbind(second.sp.dat,c(rep(0,length=length(sp)))) } rownames(second.sp.dat) <- subplot.name.dat colnames(second.sp.dat) <- sp ##各種をカウントしていくループ for( k in 1:length(subplot.name.dat)){ mod.dat <- NULL for( m in 1:length(get(subplot.name.dat[k])$name)){ if(get(subplot.name.dat[k])$Nokabu[m]==get(subplot.name.dat[k])$No[m] | is.na(get(subplot.name.dat[k])$No[m])){ mod.dat <- rbind(mod.dat,get(subplot.name.dat[k])[m,]) }else{ } } for(n in 1:length(sp)){ for(p in 1:length(mod.dat$name)){ if(sp[n] == mod.dat$sp[p]){ second.sp.dat[k,n] <- second.sp.dat[k,n] + mod.dat$nos[p] }else{ } } } } diff.sp.dat <- second.sp.dat - first.sp.dat ##種の出現頻度を算出 col.count <- NULL threshold <- 3 for(freq.sp in 1:length(diff.sp.dat[1,])){ if(length(diff.sp.dat[,freq.sp][diff.sp.dat[,freq.sp] != 0]) >threshold ){
col.count <- append(col.count,freq.sp) }else{ } } mod.sp.dat <- diff.sp.dat[,col.count][/sourcecode]

データ入力中

再来週の林学会で発表するネタのデータ入力が終わらず、シコシコ入力中。
 ちなみにモデリングのフレームワークも真っ白け。
 う~ん。毎度のことながら学習能力低すぎるぜ。

自鯖立ててみた

最近PCを買い換えまして、今まで使っていたノートPCが遊んでいました。
 ま、確かにちょっともっさりではあるのですが、かと言って使えないわけでもない。何か有効な利用方法はないものかと思案して、wwwサーバ立ててみることにしました。ま、本当は学会のスライド作りからの現実逃避というのが原因だったり・・・

 まずは、ubuntuをフルインストールしてapache、php,python,mysqlのLAMP環境をインストールして諸々設定。

 どうにか起動したようです。まだ、何も置いてないのですがURLはこちら。

 http://sheephead.homelinux.org

 これで、おもちゃが一つ増えてしまいました。どうやっていじるかしら。後は運用コストか。ノートPCなのでそこまで電気代は食わないとは思いますが、ちょっと心配・・・

 ちなみに容量も多少余裕がありますので、間借りしたいという方いらしゃいましたらご相談ください。

最近の独り言 on 2009-03-08

  • スチャダラを知らないと言われると世代を感じるよな。 #
  • フェネックを里子に出している人知りませんか? #
  • 鯖がおちてるし #
  • ま、海外鯖なんてそんなものか #
  • やっぱり鯖の調子が良くない #
  • ま、寝るか #
  • 写真の偽装工作のせいで半日つぶす #
  • いかん、学会の準備にまで手が回らんぞ #
  • おうち帰ってきた #
  • 今日の晩ご飯はキャベツ #
  • 生でまるかじり #
  • とうとうwinともおさらばか #