2016-07-08 4 views
-3
st = list("amber johnson", "anhar link ari") 
t = str_match_all(st, "(\\ba[a-z]+\\b)") 
str(t) 
# List of 2 
# $ : chr [1, 1:2] "amber" "amber" 
# $ : chr [1:2, 1:2] "anhar" "ari" "anhar" "ari" 

なぜ結果はそんなに繰り返されますか?Rの `` `stringr``の` `str_match_all```の動作を説明してください

+0

がエラーなしでこの実行していますか? 'str_match_all'は最初の引数として文字列を受け取ります。行2の実行結果が' Error:Stringはアトミックベクトルでなければなりません.' – copeg

+0

@copegそれはエラーなしで実行されます。 – tnabdb

+0

@copeg - 古いバージョンの* stringr *を使用している可能性があります。バージョン1.0.0で私のために働いてください –

答えて

3

あなたは?str_match_all値を見れば、それは言う:

For str_match, a character matrix. First column is the complete match, followed by one column for each capture group. For str_match_all, a list of character matrices.

あなたのパターンは、キャプチャグループを含んでいるので、結果は2列、キャプチャグループのための完全試合1対1に含まれています。あなたが繰り返し列をしたくない場合は、パターンからグループかっこを削除することができます

st = list("amber johnson", "anhar link ari") 
t = str_match_all(st, "\\ba[a-z]+\\b") 
str(t) 

与える:

# List of 2 
# $ : chr [1, 1] "amber" 
# $ : chr [1:2, 1] "anhar" "ari" 
+3

捕獲グループがない場合、 'str_match_all'にはまったく必要がなく、' str_extract_all'で十分です。また、 'regmatches'で' gregexpr'を使うことさえできます。 –

+0

@Psidom、Ah ...参照してください。ヘルプページを読みましたが、結果に完全な一致とキャプチャグループが含まれていることを理解していませんでした。ありがとう。 – tnabdb

関連する問題