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

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

작성한 질문수

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

시각화 문제2번에 관련해서 질문이 있습니다.

해결된 질문

작성

·

879

1

마지막 시각화 단원에서

문제 1번에 대해서는 답으로 제시해주신

plot(aws[1:200,"TA"], type = "l") 이 방식과 제가 생각한 방식인

plot(aws$TA[1:200],type = "l") 이 방식은 둘 다 동일한 결과를 보여주었습니다.

하지만 문제 2번에서는 제시해주신 방식인 

ggplot(data=aws[1:200,],  aes(x=1:200, y=TA)) + geom_line() 이 방식만 작동하고 제가 생각한 방식인

ggplot(data = aws, aes(x=1:200, y=TA[1:200])) + geom_line() 은 작동하지 않으면서 아래와 같은 에러 메세지가 나왔습니다.

에러: Aesthetics must be either length 1 or the same as the data (5886): x and y

Run `rlang::last_error()` to see where the error occurred.

제가 생각한 방식이 plot()에서는 돌아가고 ggplot()에서는 돌아가지 않은 이유가 무엇인지 궁금합니다.

 

답변 1

1

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

이것은 ggplot2 의 함수 설계 차이 입니다.

aes() 함수 내에 선언하는 것은 명확한 값이거나 특정 변수를 지칭해야 합니다.

 

그런데 TA[1:200] 의 경우 TA객체의 첫 번째 원소부터 200번째 원소를 지칭한 것과 같게 됩니다.

물론 의도하신 것은 aws 객체의 TA 변수의 원소 일부를 지칭하시려고 하셨을 겁니다.

그나마 의도한 문법으로 코드를 작성할 경우 다음과 같이 작성해볼 수 있습니다.

ggplot() + 

geom_line(aes(x = 1:200, y = aws$TA[1:200]))

 

이와 관련하여 더 알아보시려면 R 문법의 표준평가/비표준평가 를 보셔야 합니다.

감사합니다.

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

작성한 질문수

질문하기