R

RでSleep Sort

R

本当はSys.sleepを使いたいのだがforkの中で使うと動かない。 # install.packages("fork") require("fork") sleep <- function(t) { Map(sqrt, 1:(100000 * t)) } Map(wait, Map(function(x) { fork(function() { sleep(x) cat(x) }) }, c(9,3,7,1,2,6,4,5,8…

Rの式の構造をS式で表現する関数

ソース:gist:392146 · GitHub Rが如何にLispに似ているかが分かる。 cmd.img <- function(exp, filename) { filename <- paste(filename, ".png", sep="") png(filename) eval(substitute(exp)) dev.off() c(pre(capture.output(substitute(exp))), img(fil…

Rの遅延評価

R

Rの遅延評価そのものはいたって普通ですが、Mapや?applyが副作用を使用しているので変態な動作をします。 from @mickey24 f <- Map(function(x){function() x}, 1:10) f[[1]]() #=> 10 # えっ!? 副作用無しで書けば直観通りに動作します。 car <- function(x…

Rの文字列が何バイトか確認するには

R

length(charToRaw("おはよう")) #=> 12 などとすればよい。これを使うように再定義すればwrite.socketで多バイト文字を問題なく送信できる。 forkしまくってたら こうなった

リゲス....!!

R

U.リゲスのRの基礎とプログラミング技法 - ウーヴェリゲス - Google ブックスの87ページの下には 演算子" と書いてあるが正しくない。 a <- function(){ i <- 0; function() i <<- 1} x <- a() i #=> エラー: オブジェクト 'i' がありません get("i", envir…

遅延コワい

R

Schemeを使うとき、しばしば以下のようにクロージャのなかに関数を閉じ込める。 例えばメモ化した関数を作りたいときや、呼び出し回数をカウントできる関数を作りたいときとかにそうする。 (define (a f) (lambda () (f))) (define (x) 0) (define x (a x)) …

Rさわってみる続き。

R

Rの関数はベクトル化しないと、ベクトルを引数にとったときAPLのような動作をしてくれないらしい。でもプリミティブな関数はほとんどベクトル化されているからあんまり深く考えないでも大丈夫なようだ。この仕様は関数定義は冗長になるが、APLより単純で良い…

Rをさわってみた

R

机の上に積んである本のページ数のヒストグラム Rの文法はかなり洗練されている。APL/J・Lisp/Schemeをかじってたおかげですんなりと理解できそうだ。今日は大学にも行かず勉強もそんなに集中せずダメな一日だった。バイト先では宿題を突然たくさん出すとい…