2013-11-03 2 views
0

mtcars의 데이터에 대해 rbind를 실행 해 봅시다.rownames (y [33,])와 rownames (y) [33]의 차이점은 무엇입니까?

apply(mtcars,2,sum)->x 
rbind(mtcars,x) 
rbind(mtcars,x)->y 

이유 rownames(y[33,])<-"total" [33] Y의 이름을 변경할 수 있는가?
rownames(y)[33]<-"total" y [33,]의 이름을 바꿀 수 있습니까?
둘 사이의 차이점은 무엇입니까?

> y[33,] 
    mpg cyl disp hp drat  wt qsec vs am gear carb 
33 642.9 198 7383.1 4694 115.09 102.952 571.16 14 13 118 90 
> rownames(y[33,]) 
[1] "33" 
> class(y[33,]) 
[1] "data.frame" 

y [33]]은 벡터가 아니며, data.frame이며, 또한 rownames도 있습니다.

+0

[33,]은 벡터가 아닌 데이터 프레임을 반환합니다. 데이터 프레임의 한 열을 하위 설정하는 동안 벡터가 반환됩니다. 한 행을 하위 설정하면 데이터 프레임이 반환됩니다. –

+0

@ MarktheGraph 당신 말이 맞아요. – Roland

답변

1

하나의 행 (y [33,])을 얻기 위해 데이터 프레임을 부분 집합하면 새 (한 행) 데이터 프레임이 만들어집니다.

그러나이 하위 설정이 함수 호출 측에서 발생 했으므로 새로 만든 하나의 행 데이터 프레임이 변수에 할당되지 않았습니다. 따라서 하나의 행 데이터 프레임을 나중에 검사하기가 어렵습니다.

믿거 나 말거나, 데이터 프레임의 한 행의 이름을 'total'(으)로 변경했습니다.

z로 이동하여 확인할 수 있습니다. < - rownames (y [33,]) < - 'total'; print (z). z가 인쇄되면 우리는 'total'값을 갖는 하나의 행 이름을가집니다. (rownames 함수 호출 내에서 표현식 y [33,]이 평가 될 때 생성 된 한 행 데이터 프레임에서부터).

그러나 위에서 언급 한 것처럼 새로 생성 된 데이터 프레임이 변수에 할당되지 않았기 때문에; 데이터 프레임이 유실되었는지 나중에 검사 할 수있는 능력. 어떤 변수에도 할당되지 않았으므로 궁극적으로 R 가비지 컬렉터에 의해 정리됩니다.

한편 rownames (y)는 y에 지정된 데이터 프레임에서 33 개의 모든 행 이름을 생성합니다. 행 이름은 벡터에 있습니다. 숫자 인덱스 33 및 할당을 사용하여 원하는 행 이름이 변경되도록합니다. 데이터 프레임 객체는 변수 y에 할당되기 때문에; 나중에 변경 사항이 적용되었는지 확인할 수 있습니다.

호프는 비슷하게 보이지만 실제로는 매우 다른 두 표현식이 어떻게 진행되는지 설명하는 데 도움이됩니다.

관련 문제