裏 RjpWiki

Julia ときどき R, Python によるコンピュータプログラム,コンピュータ・サイエンス,統計学

もっと簡単な方法がある

2010年08月30日 | ブログラミング
こんな風なcsvファイルがあったとする。
hoge, 2
fuga, 3
piyo, 1

これは文章中にhogeが2回、fugaが3回、piyoが1回出てきたというようなものを表わしている。ここで、このcsvの情報から単語 の登場回数の密度推定をやって欲しいとか言われたとする(ex:自然言語処理特論)。この情報から密度推定をしようと思うと、Rなら次のようなベクトルが 必要になる。

c(hoge, hoge, fuga, fuga, fuga, piyo)

これを,こんな風にしている
unlist(apply(d, 1, function(x){rep(x[1], x[2])}), use.names = FALSE)


もっと簡単な方法がある。以下のようにすればよい。
> rep(as.character(d$word), d$count)
[1] "hoge" "hoge" "fuga" "fuga" "fuga" "piyo"
コメント
  • X
  • Facebookでシェアする
  • はてなブックマークに追加する
  • LINEでシェアする

大域変数への代入

2010年08月30日 | ブログラミング

差集合的なにかAdd StarwakutekaRion778

集合は定義から、同じ要素は含まないわけですが、そうゆうのも許して欲しいときがある。こういう2つのベクトルがあったとき

x <- c("a", "b", "c", "a", "a", "b")
y <- c("c", "d", "c")

Rでの差集合演算を使うともちろんこうなる。

> setdiff(x, y)
[1] "a" "b"

定義からいくともちろん正しいのだが

c("a", "b", "a", "a", "b")

で返ってきて欲しい場合もある。というわけで、ごねくりまわしてなんとかしてみた。頭が悪いので、きっともっとよい方法があるに違いない。まる。

大域変数への代入があるのであまりよくないが以下のようにすれば?

> lapply(y, function(i) x <<- x[!(x %in% i)])[[length(y)]]
[1] "a" "b" "a" "a" "b"

コメント (1)
  • X
  • Facebookでシェアする
  • はてなブックマークに追加する
  • LINEでシェアする

居心地悪し

2010年08月30日 | ブログラミング
# 板倉-斎藤歪み距離
1 / length(f) * sum(f - y1 + exp(y1) / exp(f) - 1)


このように書いて欲しいなあ
sum(f - y1 + exp(y1) / exp(f) - 1) / length(f)
コメント
  • X
  • Facebookでシェアする
  • はてなブックマークに追加する
  • LINEでシェアする

PVアクセスランキング にほんブログ村

PVアクセスランキング にほんブログ村