yuu_nkjm blog


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"   

としてしまって,はまった.リストはベクトルだから,これでは何も変換されないんですね.


トップ «前の日記(2010-07-15(Thu)) 最新 次の日記(2010-07-17(Sat))» 月表示 編集 設定
2006|01|06|12|
2007|06|09|
2008|01|03|04|06|07|08|09|10|12|
2009|01|02|05|06|07|08|10|11|12|
2010|03|04|05|06|07|08|09|10|11|
2011|01|02|03|04|05|06|07|08|09|11|12|
2012|01|02|04|06|07|08|10|11|12|
2013|01|02|03|07|08|10|11|12|
2014|01|02|04|05|06|07|08|09|10|11|
2015|01|02|07|11|12|
2016|01|03|05|07|08|09|