2013-08-24 1 views
5

일부 정규 표현식과 일치하지 않는 요소로 하위 집합을 만들려는 문자 벡터가 있다고 가정합니다. 나는 grep 일치하는 부분 집합을 제거 - 연산자를 사용할 수 있습니다 : 나는 "d" 일치하는 항목을 제외하고 모든 것을 다시 부여하고있어빈 grep을 제외한 모든 부분에 서브셋을 설정하면 빈 벡터가 반환됩니다.

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

. 내가 대신 다시 내가 기대하는 것처럼 모든 것을 얻는 발견되지 정규 표현식을 검색하는 경우, 나는 다시 아무 것도 얻을 :

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

왜 이런 일이 무엇입니까?

답변

8

grep은 정수 벡터를 반환하고 일치 항목이 없을 경우 integer(0)을 반환합니다.

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

- 운영자가 elementwise 작동하고, integer(0)에 요소가 없기 때문에, 부정은 정수 벡터 변경되지 않습니다 차례로 vec[integer(0)]로 평가 vec[-integer(0)]

> -integer(0) 
integer(0) 

그래서 vec[-grep("z", vec)]는 평가를 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" 
관련 문제