Hatena::ブログ(Diary)

もうカツ丼でいいよな このページをアンテナに追加 RSSフィード Twitter

2009 | 05 | 06 | 07 | 08 | 09 | 10 | 11 | 12 |
2010 | 01 | 02 | 03 | 04 | 05 | 06 | 07 | 08 | 09 | 10 | 11 | 12 |
2011 | 01 | 02 | 04 | 05 | 06 | 07 | 08 | 09 | 12 |
2012 | 02 | 03 | 04 | 05 | 06 | 10 | 11 | 12 |
2013 | 01 | 02 | 04 | 06 |
2014 | 06 |

2009-07-30

[][]skype読書会1回目 01:00 skype読書会1回目を含むブックマーク skype読書会1回目のブックマークコメント

404 File Not Found

さんかした.ベクトル,行列,配列あたり.

メモった事

評価される順序,長さの異なるベクトル同士の演算
matrix(1:3 + 1:7, nrow=2, ncol=5)

などとやった場合,まず

1:3 + 1:7

が評価され,次のベクトルが生成される.

2 4 6 5 7 9 8

ここでは短い方のベクトル1:3が繰り返し使用されていること,ベクトルの長さ(要素の個数)が7になっていることに注意.長さが異なるベクトル同士で演算をした場合,短い方のベクトルが繰り返して使用される.

その次に今生成されたベクトルがmatrixに引数として渡される.つまり,最初のヤツは

matrix(c(2,4,6,5,7,9,8), nrow=2, ncol=5)

と同じということ.

結果は次のようになる.

     [,1] [,2] [,3] [,4] [,5]
[1,]    2    6    7    8    4
[2,]    4    5    9    2    6
Warning messages:
1: In 1:3 + 1:7 :
  longer object length is not a multiple of shorter object length
2: In matrix(1:3 + 1:7, nrow = 2, ncol = 5) :
  data length [7] is not a sub-multiple or multiple of the number of rows [2]

今度は今生成され引数として渡されたベクトルが繰り返し使用される(matrixは長さ10のベクトルを欲しがっている).

Warningを見ると,まず1:3+1:7を計算したときに怒られていて,次にmatrixにその結果を渡すときに怒られていることが分かる.

またこの例のように長さの異なるベクトルを使う場合,長い方のベクトルの長さが短かい方のベクトルの長さの整数倍でないとWarningが出る.長さが整数倍ならばこのようなWarningは出ない.

return()は遅い

省略できるときは省略しましょう.(by id:mickey24)

返り値を画面に表示してくれなくていいとき

例えばdev.off()関数を実行すると現在のグラフィックデバイスとデバイス番号が表示される。nullデバイスはオフにできないので、普通は最低でも次の様な表示がされる。

> plot(1)
> dev.off()
null device 
          1 

この表示をさせないためには、

> invisible(dev.off())

というようにinvisible()関数を使えばよい(ただしWarning、Errorは表示される)。(by id:hiratake55)

あるいは、

> dev.off() -> hoge

として返り値を適当なオブジェクトに代入してしまっても表示されない。(バッドノウハウ?)。

代入操作はコンソールへの出力を行なわないためこのようなことができる。他のほとんどのオブジェクトは実行時にprint()が自動的に補われるので普通はコンソールに適当な出力が発生する。この自動的に補われるprint()を実行させないのがinvisible()といった感じか。

感想

脱線ためになる.

みっきー先生ありがとう.

発声しないのは僕の習性.

2009-07-19

[][][] quickrun.vimの導入など(for Windows) 15:13  quickrun.vimの導入など(for Windows)を含むブックマーク  quickrun.vimの導入など(for Windows)のブックマークコメント

ううむ.

用意したもの

ダウンロードしたquickrun.vimを~/vimfiles/pluginに置いたら設定おわり(~は環境変数HOMEで設定したとこ).

Rで使うときの注意

普通は開いたファイルをVimに入ってるfiletype.vimが適当に判断してくれてfiletypeが設定される.なので普通は特に考えなくても<leader>r(<leader>は初期状態だと'\')とタイプするだけでquickrun.vimがfyletypeを元に適当にコマンドを実行して結果を表示してくれる(quickrun.vimがそのfiletypeに対応しているならば).

ただ,R以外にREXXとRebolという言語が拡張子.r(.R)を使うらしくて,filetype.vimが.rという拡張子に出会った場合,ファイルの中身を覗くことでfiletypeを決定する.その際にRのファイルだということを判断するのはRでコメントにつかう'#'なので,ファイルの行頭なんかに何でもいいのでコメントを書いておくと確実にRのファイルだと判断してくれる.もしも'#'が見つからないとREXXのファイルと判断されてしまう仕様なので気をつける.

もしくは設定ファイルを用意することで.rを必ずRのファイルだと認識させることもできる(404エラー | 該当のページが見つかりませんなどを参考に).

これで動くけど…

E480: 該当はありません: '=bufname'

というエラーが毎回出てバッファーの名前が設定されない.Rubyだと出来るんだけど…

2009-07-12

[][] WindowsのRを更新するときにやること 03:27  WindowsのRを更新するときにやることを含むブックマーク  WindowsのRを更新するときにやることのブックマークコメント

とりあえず動いてるだけで満足していたので色々甘かったぽい.環境変数とかはインストールしたときにちゃんと設定しておくべき.

パッケージ周辺

ライブラリの保存先指定

library()でライブラリを読み込むとき,あるいはinstall.packages()でパッケージを(引数なしで)インストールするとき,デフォルトでは.libPath()で返ってくるフォルダを探す/へ保存する.libPath()の返り値は,特に環境変数とか設定してなければRのインストール先にあるlibraryフォルダだけになるけど,環境変数のR_LIBS,R_LIBS_USERに値が設定してあるとそっちがリストの頭に来る.R_LIBS_USERは,R_USERが設定されている場合,そこから/R/win-library/[バージョン番号]のフォルダで初期化される.

なのでもしバージョンごとにパッケージを分けて管理しておきたかったら,R_USERだけを設定しておく.そうすると設定したフォルダの下に適当にフォルダが作成されていく.

でもそれだとRを更新したときにパッケージをインストールしなおすか手動で移動させる必要があって面倒.環境変数のR_LIBS(またはR_LIBS_USER)を設定してしまうと便利.

  • 環境変数変数R_LIBSを追加,値として適当なフォルダ(e.g. C:\R\library)を設定

ちなみにXPではすぐに認識したけど,Vistaだと再起動しないと.libPath()した値が変わってなかった.

パッケージのアップデート

ライブラリの保存場所をまとめてある場合,旧バージョンで使えなくなるやつもあるかもしれないので,旧バージョンを使う可能性のある人は注意.

update.packages(ask='graphics')

とするとアップデートできる.ask='graphics'はどれをアップデートするか選択したいなら必要.そうでなければ単にupdate.packages()でok.

ちなみにVistaだと管理者権限がないと途中でエラーが出るのでRを管理者権限で起動してアップデートなりインストールなりをした方がいい.ただエラー出てもhtmlが保存できなかったとかその程度なので動くには動く.

ESS周辺

今までわざわざPATHをいじってたけどその必要はないということが分かった..emacsに以下の記述を追加.

;; ESS用 Rを更新したら書き直す.
(setq-default inferior-R-program-name "C:/Program Files/R/R-2.9.1/bin/Rterm.exe")

後半は使いたいバージョンのRterm.exeへのフルパス.バージョンアップしたら書き変えればok.

ちなみにこの辺いじればいいということはid:syou6162に教えてもらいました.どうもありがとうございました.

まとめ

環境変数が設定してあれば

これだけでok.

参考

[][][] .emacsに追加したもののメモ 20:06  .emacsに追加したもののメモを含むブックマーク  .emacsに追加したもののメモのブックマークコメント

やったこと

必要だったもの

.emacs

;; linum.el(行番号の表示)
(require 'linum)
(global-linum-mode t)
(setq linum-format "%5d")

;; 起動時の画面を表示させない
(setq inhibit-startup-message t)

;; M-x alignの設定 for ESS
(require 'align)
(add-to-list 'align-rules-list
	     '(ess-assignment-operator
	       (regexp . "\\(\\s-*\\)<-[^#\t\n]")
	       (repeat . nil)
	       (modes  . '(ess-mode))))

;; flymake for .cpp files
(require 'flymake)

(defun flymake-cc-init ()
  (let* ((temp-file (flymake-init-create-temp-buffer-copy
		      'flymake-create-temp-inplace))
	  (local-file (file-relative-name
		       temp-file
		       (file-name-directory buffer-file-name))))
       (list "g++-3" (list "-Wall" "-Wextra" "-fsyntax-only" local-file))))

(push '("\\.cpp$" flymake-cc-init) flymake-allowed-file-name-masks)

(add-hook 'c++-mode-hook
	  '(lambda ()
	     (flymake-mode t)))
; 色をいい感じに
(custom-set-faces
 '(flymake-errline ((((class color)) (:background "Gray30"))))
 '(flymake-warnline ((((class color)) (:background "Gray20")))))

参考

2009-07-08

[][]Meadow + ispell(aspell)使ってスペルチェック 14:54 Meadow + ispell(aspell)使ってスペルチェックを含むブックマーク Meadow + ispell(aspell)使ってスペルチェックのブックマークコメント

英単語などのスペルチェック.flyspell-modeを使えばMS Wordなんかであるようなリアルタイムでのチェック(波線が付くやつ)もできる.大変便利なので導入してない人は至急導入するように.

要るもの

やること

Cygwinのsetup.exeから以下のものをインストール

  • aspell
  • aspell-doc
  • aspell-en
  • libaspell15

.emacsに以下の記述を追加.

(setq ispell-program-name "aspell")
(setq ispell-grep-command "grep")
(eval-after-load "ispell"
  '(add-to-list 'ispell-skip-region-alist '("[^\000-\377]")))

これだけ.カンタン!(参考: Spell check)

使い方

M-x ispell-まで入力してTabを押すと色々できることが出てくる.ispell-wordだったらカーソルの右の単語をチェック,ispell-bufferだったらバッファ全体をチェック,といった具合.

また,M-x flyspell-modeとするとカーソルがある行のスペルチェックを自動で行なってくれる.間違った単語は強調表示してくれる.

2009-07-07

[][][]Windows + VC++でOMakeを使ってC++プログラムコンパイル 23:49 Windows + VC++でOMakeを使ってC++プログラムをコンパイルを含むブックマーク Windows + VC++でOMakeを使ってC++プログラムをコンパイルのブックマークコメント

ちょっと前に使えないとか言ってたけど(OMakeが使えない? - もうカツ丼でいいよな)よく調べて面倒なことをやったらできた。

要るもの

やること

VC++に付いているclはそのまま呼んでもmspdb80.dllが無いとか言われて使えない。コマンドプロンプトからclと叩いてコンパイルできる状態にするにはC:\Program Files\Microsoft Visual Studio 9.0\Common7\Toolsに入っているvsvars32.batというバッチファイルを実行すればいい。けどコマンドプロンプトを開く度にやらないといけないのでOMakeからclを呼ぶべく色々やっても多分コケる。

なので、vsvars32.batの中身を見て、vsvars32.batが設定する環境変数を全て設定してしまう(参考:404 Not Found)。

ふおおおお…

まあとにかくこれで無事にOMakeが動くようになる。

例えばhello.cppというファイルがあったとして、同じディレクトリ内でomake --installを実行、出てきたOMakefileに例えば次のように書いておく。

CXXFLAGS += /EHsc
.DEFAULT: $(CXXProgram hello, hello)

これで、あとはコマンドプロンプトなり何なりからomakeすればコンパイルされるし、omake -Pすれば継続監視してくれる。

結局gccを使う方法は分からないけどまあいいや。