기본 콘텐츠로 건너뛰기

R에서 변수 대입 및 입력 (1)




 앞서 R의 기본 연산자를 통해 R을 계산기처럼 쓸 수 있다고 설명드렸습니다. 하지만 사실 계산기로만 쓰는 경우는 별로 없을 것이고 보통 데이터 처리 용으로 사용하게 됩니다. 데이터 처리를 위해서는 일단 데이터를 입력해야 합니다. 


 하지만 R 콘솔에서 직접 데이터를 입력하는 경우는 테스트 및 교육 목적 이외에는 많지 않을 것이고 보통은 엑셀 같은 스프레드시트 프로그램에서 입력한 파일을 사용하게 됩니다. 하지만 이런 경우라도 변수에 값을 할당해서 다양한 연산을 시도하게 됩니다. 따라서 변수에 값을 대입하고 입력하는 것은 매우 기본이라고 할 수 있습니다. 


 R에서 변수 이름으로 정할 수 있는 것은 영문 알파벳과 숫자가 기본이며 이외에 _ 와 . 를 쓸 수 있습니다. 하지만 주의해야 할 점은 - (하이픈)은 쓸 수 없으며 알파벳과 숫자의 조합인 경우 반드시 알파벳이 가장 먼저 와야 한다는 것입니다. X는 변수명이 되지만 3은 변수명이 될 수 없다는 점을 생각하면 이해가 빠를 것입니다. - 역시 빼기 연산자와 혼동을 주므로 변수명으로 쓸 수 없습니다. 


 즉 X3, X_Y, X.Y 는 올바른 변수명이며 3X, X-Y는 잘못된 변수입니다. 변수의 할당은 보통 <- ctrl="" enter="" nbsp="" r="" run="" span="">


----------------------------------------------------------------
> x3<-3 span="">
> x3
[1] 3
> x_y<-3 span="">
> x_y
[1] 3
> x.y=3
> x.y
[1] 3
> 3x=3
에러: 예상하지 못한 기호(symbol)입니다. in "3x"
> x-y=3
Error in x - y = 3 : 객체 'x'를 찾을 수 없습니다

------------------------------------------------------------------


 R의 특징은 기본으로 벡터 형태의 데이터를 사용한다는 것입니다. 이는 마치 2차원 데이터처럼 보이는데, 엑셀 파일에서 X 축과 Y 축 상에 데이터가 입력되어 있는 모습을 생각하면 이해가 빠를 것입니다. 따라서 변수 입력 역시 그렇게 할 수 있습니다. 일단 설명을 위해서 1차원적으로 데이터를 입력하는 경우를 보여드립니다. c() 를 이용해서 여러 개의 변수를 입력할 수 있습니다.  


---------------------------------------------------------------------

> x<-c span="">
> x
[1] 1 2 3 4 5 6 7


----------------------------------------------------------------------


 이렇게 여러 개의 변수 입력이 가능하므로 통계적인 처리 역시 가능합니다. 예를 들어 평균을 구하기 위해 mean 명령어나 표준 편차를 구하기 위한 sd 명령어 같은 경우입니다. 


------------------------------------------------------------------------

> mean(x)
[1] 4
> sd(x)

[1] 2.160247

-------------------------------------------------------------------------

 물론 변수에는 숫자가 아닌 문자도 할당할 수 있습니다. a,b,c,d.... 하는 식으로 말이죠. 다만 숫자가 아닌 문자열이라는 점을 표시하기 위해서 "" 를 써야 합니다. 만약 쓰지 않으면 에러가 나죠. 


-------------------------------------------------------------------------

> y<-c a="" b="" c="" d="" e="" f="" span="">
에러: 객체 'a'를 찾을 수 없습니다
> y<-c a="" b="" c="" span="">
> y
[1] "a" "b" "c"

---------------------------------------------------------------------------

 숫자도 사실은 문자나 기호일 수 있습니다. 가장 대표적인 예는 남자를 1, 여자는 0으로 코딩하는 경우일 것입니다. 이 경우 "1" 을 써주면 문자열로 인식합니다. 물론 명령어를 통해 팩터(factor)인지 여부를 확인하고 형태를 바꾸는 것도 가능한데, 나중에 설명하겠습니다. 


 일단 여기까지 간단한 변수 입력 방법이었습니다. 그런데 한 가지 중요한 것이 있습니다. <- nbsp="" r="" span="">


-----------------------------------------------------------------------------

> mean(x<-c span="">
[1] 3
> x
[1] 1 2 3 4 5
> mean(y=c(1,2,3,4,5))
Error in mean.default(y = c(1, 2, 3, 4, 5)) : 
  기본값이 없는 인수 "x"가 누락되어 있습니다
> y
에러: 객체 'y'를 찾을 수 없습니다
> y=c(1,2,3,4,5)
> mean(y)
[1] 3

------------------------------------------------------------------------------


 즉 = 기호는 가장 높은 수준에서 사용해야 합니다. 안전한 방법은 변수를 할당하는 경우는 <- nbsp="" span="">


 사실 이 내용을 설명한 책이 별로 없어서 저는 차이점을 아는 데 많은 시간이 걸렸습니다. 알수 없는 오류가 발생하는 경우 혹시 이 문제에서 오류가 생긴 것은 아닌지 확인해볼 필요가 있을 것입니다. 

댓글

이 블로그의 인기 게시물

벨 V-280 Valor 시험 비행 성공

( The V-280 Valor flew for the first time at Bell Helicopter's Amarillo Assembly Center in Texas(Credit: Bell Helicopter/YouTube) )  앞서 소개드린 V-280 발러가 첫 번째 비행 테스트에 성공했다는 소식입니다. V-22 오스프리의 소형화 버전이라고 할 수 있는 V-280 발러는  미 육군의 차세대 헬기 사업인 Future Vertical Lift (FVL)에 입찰을 시도하는 틸트로터기로 현재 미 육군이 주력으로 사용하는 블랙호크 헬기와 비슷한 체급입니다. 다만 틸트로터기인 만큼 최고 속도나 항속 거리면에서 더 유리합니다. 스펙은 이전 포스트를 참조해 주시기   이전 포스트:  https://blog.naver.com/jjy0501/221115245986  (동영상)   V-280 발러는 틸트로터기의 더 대중화 될 수 있을지를 검증하는 중요한 무대가 될 것입니다. V-22 오스프리의 경우 복잡한 구조로 인해 가격이 너무 비싸져서 사실 미국은 몰라도 그 동맹국에 널리 도입되기는 어려운 부분이 있습니다. V-280 역시 가격이 아주 저렴할 것 같지는 않지만, 좀 더 합리적인 대안은 될 수 있을 것 같습니다. 만약 성공적인 결과가 나오면 한국을 포함한 미국의 동맹국에서 도입을 검토할 수 있을지 모르겠다는 생각입니다.   참고  https://newatlas.com/bell-v-280-valor-maiden-flight/52663/

세상에서 가장 큰 벌

( Wallace's giant bee, the largest known bee species in the world, is four times larger than a European honeybee(Credit: Clay Bolt) ) (Photographer Clay Bolt snaps some of the first-ever shots of Wallace's giant bee in the wild(Credit: Simon Robson)  월리스의 거대 벌 (Wallace’s giant bee)로 알려진 Megachile pluto는 매우 거대한 인도네시아 벌로 세상에서 가장 거대한 말벌과도 경쟁할 수 있는 크기를 지니고 있습니다. 암컷의 경우 몸길이 3.8cm, 날개너비 6.35cm으로 알려진 벌 가운데 가장 거대하지만 수컷의 경우 이보다 작아서 몸길이가 2.3cm 정도입니다. 아무튼 일반 꿀벌의 4배가 넘는 몸길이를 지닌 거대 벌이라고 할 수 있습니다.   메가칠레는 1981년 몇 개의 표본이 발견된 이후 지금까지 추가 발견이 되지 않아 멸종되었다고 보는 과학자들도 있었습니다. 2018년에 eBay에 표본이 나왔지만, 언제 잡힌 것인지는 알 수 없었습니다. 사실 이 벌은 1858년 처음 발견된 이후 1981년에야 다시 발견되었을 만큼 찾기 어려운 희귀종입니다. 그런데 시드니 대학과 국제 야생 동물 보호 협회 (Global Wildlife Conservation)의 연구팀이 오랜 수색 끝에 2019년 인도네시아의 오지에서 메가칠레 암컷을 야생 상태에서 발견하는데 성공했습니다.   메가칠레 암컷은 특이하게도 살아있는 흰개미 둥지가 있는 나무에 둥지를 만들고 살아갑니다. 이들의 거대한 턱은 나무의 수지를 모아 둥지를 짓는데 유리합니다. 하지만 워낙 희귀종이라 이들의 생태에 대해서는 거의 알려진 바가 없습니다.  (동영상)...

몸에 철이 많으면 조기 사망 위험도가 높다?

 철분은 인체에 반드시 필요한 미량 원소입니다. 헤모글로빈에 필수적인 물질이기 때문에 철분 부족은 흔히 빈혈을 부르며 반대로 피를 자꾸 잃는 경우에는 철분 부족 현상이 발생합니다. 하지만 철분 수치가 높다는 것은 반드시 좋은 의미는 아닙니다. 모든 일에는 적당한 수준이 있게 마련이고 철 역시 너무 많으면 여러 가지 질병을 일으킬 수 있습니다. 철 대사에 문제가 생겨 철이 과다하게 축적되는 혈색소증 ( haemochromatosis ) 같은 드문 경우가 아니라도 과도한 철분 섭취나 수혈로 인한 철분 과잉은 건강에 문제를 일으킬 수 있습니다. 하지만 높은 철 농도가 수명에 미치는 영향에 대해서는 잘 알려지지 않았습니다.   하버드 대학의 이야스 다글라스( Iyas Daghlas )와 임페리얼 칼리지 런던의 데펜더 길 ( Dipender Gill )은 체내 철 함유량에 영향을 미치는 유전적 변이와 수명의 관계를 조사했습니다. 연구팀은 48972명의 유전 정보와 혈중 철분 농도, 그리고 기대 수명의 60/90%에서 생존 확률을 조사했습니다. 그 결과 유전자로 예측한 혈중 철분 농도가 증가할수록 오래 생존할 가능성이 낮은 것으로 나타났습니다. 이것이 유전자 자체 때문인지 아니면 높은 혈중/체내 철 농도 때문인지는 명확하지 않지만, 높은 혈중 철 농도가 꼭 좋은 뜻이 아니라는 것을 시사하는 결과입니다.   연구팀은 이 데이터를 근거로 건강한 사람이 영양제나 종합 비타민제를 통해 과도한 철분을 섭취할 이유는 없다고 주장했습니다. 어쩌면 높은 철 농도가 조기 사망 위험도를 높일지도 모르기 때문입니다. 그러나 임산부나 빈혈 환자 등 진짜 철분이 필요한 사람들까지 철분 섭취를 꺼릴 필요가 없다는 점도 강조했습니다. 연구 내용은 정상보다 높은 혈중 철농도가 오래 유지되는 경우를 가정한 것으로 본래 철분 부족이 있는 사람을 대상으로 한 것이 아니기 때문입니다. 낮은 철분 농도와 빈혈이 건강에 미치는 악영향은 이미 잘 알려져 있기 때문에 철...