n-gram が簡単にできそう
http://www.okada.jp.org/RWiki/?R%A4%CE%B4%F0%CB%DC%A5%D1%A5%C3%A5%B1%A1%BC%A5%B8%C3%E6%A4%CE%BB%FE%B7%CF%CE%F3%A5%AA%A5%D6%A5%B8%A5%A7%A5%AF%A5%C8%B0%EC%CD%F7 を見てると、embed というのがあった。
> example(embed) embed> x <- 1:10 embed> embed (x, 3) [,1] [,2] [,3] [1,] 3 2 1 [2,] 4 3 2 [3,] 5 4 3 [4,] 6 5 4 [5,] 7 6 5 [6,] 8 7 6 [7,] 9 8 7 [8,] 10 9 8
ruby の each_cons っぽい感じ。n-gram が簡単にできそう、と思ったら数値しかだめだった。
文字列で行うなら、apply とアクセスを利用して次みたいにやればよさそう。
> str <- strsplit("日本語でも大丈夫","")[[1]] > apply(embed(seq_along(str),3), 1, function(x) str[rev(x)]) [,1] [,2] [,3] [,4] [,5] [,6] [1,] "日" "本" "語" "で" "も" "大" [2,] "本" "語" "で" "も" "大" "丈" [3,] "語" "で" "も" "大" "丈" "夫"
という感じかな。そのうちマルコフ連鎖で文を生成してみるかな。