yuu_nkjm blog
2010-07-18(Sun) [長年日記] 編集
[R言語] ある分布からランダムにサンプルを取り出す
イディオム
書式 sample(x, size, replace = FALSE, prob = NULL) 引数 x : (数値、複素数、文字列、論理値)ベクトル。もしくは単一の整数(1:x と解釈) size : 選ばれる項目の数 (省略時は lenngth(x)) replace: 論理値。復元抽出か非復元抽出か? prob : 各項目を選び出す確率のベクトル(比率を与えるだけで良い)。省略時は等確率。 Rの確率分布システム - RjpWiki
使用例
hist(sample(c(0,1,2,3),1000,prob=c(100,100,300,500),replace=TRUE),freq=FALSE)

[ツッコミを入れる]
2010-07-17(Sat) [長年日記] 編集
[R言語] 追加パッケージのインストール
GUIのメニューバーより「パッケージ→パッケージのインストール」を選び,インストールしたいパッケージ名を選択する.もし,その一覧にインストールしたいパッケージがない場合は,「パッケージ→CRANミラーサイトの選択」や「パッケージ→ダウンロードサイト(レポジトリ)の選択」で設定を変更すると見つかるかもしれない.

[ツッコミを入れる]
2010-07-16(Fri) [長年日記] 編集
[R言語] 文字列をsplitした結果をイテレータとして使う
イディオム
for(element in unlist(strsplit(分割対象, セパレータの正規表現))){}
使用例
文字列を分割した結果をイテレータとして使いたいことがあるじゃないですか.Javaで書くと,ノリとしてはこんな感じ↓
String countries = "Japan|USA|EU";
for(String country :Arrays.asList(contries.split("\\|"))){
System.out.println(country);
}
これと似たことをやろうとして,Rでこう書いたら意図通り動かなかった.
countries <- "Japan|USA|EU"
for(country in strsplit(countries, "\\|")){
str(country)
}
> chr [1:3] "Japan" "USA" "EU"
そもそも分割した結果はなんやねんと見てみると
strsplit(countries, "\\|")
>[[1]]
>[1] "Japan" "USA" "EU"
というお答え.
リストの第1成分にベクトルが入っちゃってるのが悪いのか.そこで,
for(country in unlist(strsplit(countries, "\\|"))){
str(country)
}
> chr "Japan"
> chr "USA"
> chr "EU"
とするか,
for(country in strsplit(countries, "\\|")[[1]]){
str(country)
}
> chr "Japan"
> chr "USA"
> chr "EU"
としたらいけた.デバッグ開始時は,
as.vector(strsplit(countries, "\\|"))
>[[1]]
>[1] "Japan" "USA" "EU"
としてしまって,はまった.リストはベクトルだから,これでは何も変換されないんですね.
[ツッコミを入れる]