6

正規表現に一致しない要素にサブセット化したい文字ベクトルがあるとします。演算子を使用して、一致-するサブセットを削除できます。grep

> vec <- letters[1:5]
> vec
[1] "a" "b" "c" "d" "e"
> vec[-grep("d", vec)]
[1] "a" "b" "c" "e"

一致したエントリを除くすべてが返されます"d"。しかし、見つからない正規表現を検索すると、期待どおりにすべてが返されるのではなく、何も返されません。

> vec[-grep("z", vec)]
character(0)

なぜこれが起こるのですか?

4

1 に答える 1

9

grep整数ベクトルを返し、一致しない場合は を返すためですinteger(0)

> grep("d", vec)
[1] 4
> grep("z", vec)
integer(0)

-演算子は要素ごとに機能し、要素integer(0)を持たないため、否定は整数ベクトルを変更しません。

> -integer(0)
integer(0)

soは にvec[-grep("z", vec)]評価され、これはvec[-integer(0)]に評価されます。vec[integer(0)]character(0)

次のようにすると、期待どおりの動作が得られますinvert = TRUE

> vec[grep("d", vec, invert = TRUE)]
[1] "a" "b" "c" "e"
> vec[grep("z", vec, invert = TRUE)]
[1] "a" "b" "c" "d" "e"
于 2013-08-24T01:15:51.913 に答える