인프런 커뮤니티 질문&답변

까칠나무님의 프로필 이미지
까칠나무

작성한 질문수

[R을 R려줘] R 기초다지기

객체생성2에서 퀴즈1번에 대해서 질문이 있습니다.

해결된 질문

작성

·

188

1

퀴즈 1번에서 정답은 4번인 colnames(df)[c(2,4)]=c("V2", "V4") 이라고 말씀해주셨습니다만, 

보기에서 1번에 있던 colnames(df[,c(2,4)]) = c("V2", "V4") 은 왜 정답이 아닌지 모르겠습니다.

보기 1번과 4번의 앞 부분만 따오면 

> colnames(df)[c(2,4)]

[1] "bb"   "new2"

> colnames(df[,c(2,4)])

[1] "bb"   "new2"

이렇게 동일한 결과가 나오는데 이러한 결과에 =c("V2", "V4") 라는 동일한 조작을 적용했을때 왜 1번은 df의 열 이름을 바꿀수 없고 4번은 바꿀수 있는지 궁금합니다.

답변 1

1

김승욱님의 프로필 이미지
김승욱
지식공유자

안녕하세요 김승욱 입니다.

해당 코드의 핵심은 colnames() 함수로 데이터프레임 객체의 변수명 부분에 접근한 다음에 원하는 원소(변수명)를 지정하고 해당 원소를 신규 원소로 치환하는 것입니다.

그런데 두 번째 코드는 colnames() 함수를 사용하기 전에 df[, c(2, 4)] 로 df객체의 부분집합을 만들어버리기 때문에 온전하게 df 객체에 접근할 수 없게 됩니다. 즉, df 객체가 아닌 임시로 만든 df[, c(2, 4)] 객체의 변수명을 조정한 꼴이 되기 때문에 제대로 동작하지 않습니다.

자주 받는 질문인데 영상에서 설명이 미흡했나보네요.

추가 질문 있으시면 편하게 또 남겨주세요.

감사합니다.

까칠나무님의 프로필 이미지
까칠나무

작성한 질문수

질문하기