2016-11-04 1 views
0

제목 자체 설명입니다. R이 선택/부분 집합에 대한 부울 값을 재활용하는 이유를 알고 싶습니다. "["에 대한 설명서 Such vectors are recycled if necessary to match the corresponding extent. i, j선택을위한 부울 색인을 재활용하기위한 이론적 근거

이 작업을 수행하면 어떤 이점이 있습니까? 아래에 언급 된 것처럼 생각할 수는 있지만 단점이 사용 용이성의 이점보다 클 수 있다고 생각합니다.

df<- data.frame(C1=1:10,c2=101:110) 
class(unclass(df)[1]) # df is a list of two lists, each a column of df 
df 
df[1] # selects 1st list (ie, first column) 
df[2] 

# However, indices are recycled if we use Logical indices 
df[TRUE] # selects both columns 
df[c(T,T),] # recycled row indices 
df[c(T,T,F),] # recycled row indices 
df[FALSE] 

# This can actually lead to inadvertent errors 
# For example, this has only 7 index elements instead of 10, 
# but it's quite possible to miss out on the fact that these are being recycled 
df[c(T,F,T,T,F,F,F),] 

내가 생각할 수있는이 재활용 기능 만 사용이 질문에 대한 컨텍스트가 어제 SO에서 본 또 다른 하나입니다

df[c(T,F),] 

skipping alternate rows했다. 누군가가 ||| 사이의 차이 e를 지적 했으므로 나중에 삭제되었습니다. 나는 그들이 여기에서도 재활용을 다루고 있다는 것을 깨달았는지 궁금합니다. 하나가 조심해야이 성질의 다른 잘 알려진 함정

# An erronous use of && can land you in soup too 
    df [df$C1 >0 && df$c2 <102, ] #returns TRUE, will select all rows 

이 있습니까?

답변

1

장점 :

> m <- matrix(1:20, 4) 
> m[c(TRUE,FALSE), ] 
    [,1] [,2] [,3] [,4] [,5] 
[1,] 1 5 9 13 17 
[2,] 3 7 11 15 19 
> m[, c(TRUE,FALSE) ] 
    [,1] [,2] [,3] 
[1,] 1 9 17 
[2,] 2 10 18 
[3,] 3 11 19 
[4,] 4 12 20 

마다 세번째 컬럼 :

> m[, c(TRUE,FALSE,FALSE) ] 
    [,1] [,2] 
[1,] 1 13 
[2,] 2 14 
[3,] 3 15 
[4,] 4 16 

인용 된 단점

는 벡터 또는 data.frame 또는 매트릭스에서 칼럼의 매 n 번째 행을 선택할 수 있습니다 실제로는 && 연산자의 잘못된 사용입니다 (실제로 생각한 것 같습니다). 그 연산자는 길이 1 벡터 만 반환하며 일반적으로 인덱싱을 시도 할 때 부적합합니다. 그것은 아마도 질문자가 || 연산자를 사용하여 전시 한 혼란이었을 것입니다.

궁극적으로 대답은 저자가 그렇게 좋아하기 때문입니다. R은 S의 대부분의 의미에서 클론이며 AT & T 씽크 탱크에서 고수준 언어의 새벽 주위에 지어졌습니다.

+0

오, 고마워요. 예, 물론 &&와 관련된 문제를 잘 이해하고 있습니다. 나는 왜 단일 값 색인이 전체 열을 반환했는지에 대해 언급하고있었습니다. 그리고 물론 재활용 사용의 편리 성도 느꼈습니다. 확실한. 그러나, 나도 내가 색인 생성에 오류를 만들었을 때 재활용으로 인해 그것을 깨닫지 못할지 궁금하게 만들었습니다. 대답의 마지막 부분은 정말로 저를 집에 때립니다. 그것은 '전통'또는 오히려 진화론 적 뿌리가 언어를 어떻게 형성했는지에 대한 파급 효과로 보인다. –

+0

데이터 프레임의 행렬에 대한 인덱스 인 NA가 NA의 행 (또는 열)을 반환한다는 사실은 나를 괴롭히는 요인입니다. –

+0

예, 다른 논리 상수입니다. 그리고 당신도 그것을 재활용 할 수 있습니다. 'some.matrix [NA, NA]' –