そういえばTsukuba.Rに行ってきたんだった

そういえばTsukuba.Rに行ってきたんだった

なんか興奮してHaskellとか書いてたけど、一昨日Tsukuba.Rに参加して、Rを勉強してきたんだった。そこで、syou6162先生に教わったsapply()を使ってfizzbuzzを書いてみよう。

↓な感じ。

fizzbuzz <- function(x, y) {
    sapply(x:y, function(n) {
        ifelse(n %% 15, ifelse(n %% 3, ifelse(n %% 5, n, "Buzz"), "Fizz"), "FizzBuzz")
    })
}

sapply()を使ったから、for文が消えて少しRっぽくなった気がするけど、いまいち芸がない。もう少し工夫ができそう。

ifelse()って遅延評価?

このコードを書いてて一つ気がついた。ifelse()って遅延評価してるんじゃね?ってこと。

試みに、↓のコードを実行してみる。

ifelse(TRUE, print(TRUE), print(FALSE))

↓結果

[1] TRUE
[1] TRUE

やはり、FALSEが出力されていないということは、print(FALSE)は評価されていない。

遅延評価かどうかを調べるために↓のようなコードを実行してみる。

hello <- function(x) { print("hello") }
hello(print("world"))

↓結果

[1] "hello"

おぉぉぉ、print("world")が評価されていない。

ってことは、

hello <- function(x) { print("hello"); x }
hello(print("world"))

↓結果

[1] "hello"
[1] "world"

おぉぉぉぉぉぉ、関数内でxが評価されるタイミングで、print("world")が評価されている!Rは遅延評価の言語だったのか!

まとめ

  1. Rは遅延評価ができる言語でした。
  2. Tsukuba.Rは勉強になりました。
  3. 次回のTsukuba.Rまでには発表できるレベルになりたいと思いました。
  4. syou6162先生は相変わらずイケメンでした。
  5. 初めて見たhayamizはdndnでした。

追記

↓こんな記事出てたのか><

R言語と遅延評価 - (Blog ’(Yasuto . Takenaka))

Rは引数の変数に適用されるみたいです。もちろん、変数がよばれたときに評価をするようにできてる。遅延評価と言えば、tarai関数ですね。ということで tarai関数を試してみる。

スポンサーサイト



関連記事

トラックバック URL

http://liosk.blog103.fc2.com/tb.php/135-cc9804a6

トラックバック

コメント

コメントの投稿

お名前
コメント
編集キー