R 은 숫자형 벡터를 처리할 수 있는 편리한 함수를 다수 제공합니다.

 

이번 포스팅에서는 절대값 계산, 제곱근 계산, x 보다 크거나 같은 정수(지붕), x 보다 작거나 같은 정수(바닥), 소수점 이하는 잘라서 버리거나 반올림 하기, 로그 변환, 지수 변환, 팩토리얼 등의 벡터 처림 함수에 대해서 알아보도록 하겠습니다. 

 

문자형 벡터 처리 함수는 나중에 별도로 기회를 봐서 포스팅하도록 하겠습니다.

 

 

R 숫자형 벡터 처리 함수 

 

 

1) 절대값 계산 : abs(x)

 

> abs(10)
[1] 10
> abs(-10)
[1] 10

 

 

2) 제곱근 계산 : sqrt(x)

 

> sqrt(16) [1] 4 > sqrt(-16) # 허수는 NaN [1] NaN Warning message: In sqrt(-16) : NaNs produced

 

 

3) x 보다 크거나 같은 정수 (지붕 정수) : ceiling(x)

 

> ceiling(5.88)
[1] 6
> ceiling(6.00)
[1] 6

 

 

4) x 보다 작거나 같은 정수 (바닥 정수) : floor(x)

 

> floor(5.88)
[1] 5
> floor(5.00)
[1] 5

 

 

5) x 소숫점 이하는 잘라서 버림 : trunc(x)

 

> trunc(5.88)
[1] 5
> trunc(5.10)
[1] 5

 

 

6) x 를 소수점 n자리로 반올림 : round(x, digits=n)

 

> round(5.88, digits = 1)
[1] 5.9
> round(5.88, digits = 0)
[1] 6
> round(5.10, digits = 0)
[1] 5

 

 

7) x 를 밑이 n인 log 취하기 : log(x, base=n)

 

> log(10, base=2) # 밑이 2인 로그 [1] 3.321928 >

> log(10, base = exp(1)) # 자연로그 [1] 2.302585 >

> log(10) # 자연로그, base = exp(1) 을 생략해도 동일함 [1] 2.302585 >

> log(10, base=10) # 밑이 10인 상용로그 [1] 1 >

> log10(10) # 상용로그의 다른 표현법 [1] 1 

 

 

8) x 를 지수변환하기 : exp(x)

 

> exp(log(10, base=exp(1)))
[1] 10
> exp(1)
[1] 2.718282
> exp(10)
[1] 22026.47 

 

 

9) x factorial : factorial(x)

 

> factorial(2)
[1] 2
> factorial(3)
[1] 6
> factorial(4)
[1] 24
> factorial(5)
[1] 120 

 

 

이번 포스팅이 도움이 되었다면 아래의 '공감 ~♡' 단추를 꾸욱 눌러주세요.^^

 

반응형
Posted by Rfriend

댓글을 달아 주세요

  1. 김진양 2019.01.01 16:02  댓글주소  수정/삭제  댓글쓰기

    안녕하세요. r프렌드님! 데이터 분석 항상 재미있게 공부하고 있습니다.
    새해복 많이 받으세요^^

    다름 아니라, x를 지수로 변환하는 것의 의미가 잘 이해가 가지 않아서요.
    구글링, 네이버 검색을 했는데도 나오지가 않아서 질문드리게되었습니다.

    1을 지수로 변환했다는 뜻이 밑이 몇인 지수로 변환시키는건가요?

    제가 수학에 배움이 짧아 질문을 하면서도 정확한 용어를 지칭하기 어려워 댓글 달아주기 힘드실 것 같습니다. 죄송합니다!

  2. 익명 2020.06.07 11:21  댓글주소  수정/삭제  댓글쓰기

    비밀댓글입니다

    • Rfriend 2020.06.07 15:57 신고  댓글주소  수정/삭제

      안녕하세요.

      저도 미처 신경 안쓰고 있어서 모르고 있던 부분이었는데요, 댓글 남겨주셔서 저도 좀 찾아보았습니다.

      크게 두가지 이유인거 같아요.
      (1) ‘go to the even digit’
      (2) finite floating-point precision

      * round 함수 관련 https://www.rdocumentation.org/packages/base/versions/3.6.2/topics/Round

      ==> Note that for rounding off a 5, the IEC 60559 standard (see also ‘IEEE 754’) is expected to be used, ‘go to the even digit’. Therefore round(0.5) is 0 and round(-1.5) is -2. However, this is dependent on OS services and on representation error (since e.g.0.15 is not represented exactly, the rounding rule applies to the represented number and not to the printed number, and so round(0.15, 1) could be either 0.1 or 0.2).


      중간에 보면 ‘go to the even digit’ 이라는 설명이 있습니다. 아래처럼 0.5, 1.5, 2.5, ... 숫자를 round() 하면 0, 2, 2, 4, 4, 처럼 짝수(even digit) 로 반올림이 됩니다.

      > 0.5 + 0:10
      [1] 0.5 1.5 2.5 3.5 4.5 5.5 6.5 7.5 8.5 9.5 10.5
      > round(0.5 + 0:10)
      [1] 0 2 2 4 4 6 6 8 8 10 10



      (2) finite floating-point precision
      R이나 Python이나 보면 부동소수형 숫자의 표현에 있어서 precision에 제약이 있습니다. 그래서 소수점 몇째짜리(?)까지 아주 정밀하게 계산하는 경우 아주 미세한 오차가 발생할 수 있습니다. R의 round() 함수도 이런 부동소수형의 표현 제약이 영향을 미쳤을 수도 있을 것 같습니다. (확인 필요... ^^;)

      만약 아래처럼 0.000000001 처럼 아주 작은 숫자를 끝에 더해주면 0.025를 0.03으로 모두 동일하게 반올림해주게 할 수 있습니다.

      > x <- seq(0, 0.9, 0.1) + 0.025 + 0.00000001
      > round(x, 2)
      [1] 0.03 0.13 0.23 0.33 0.43 0.53 0.63 0.73 0.83 0.93

  3. 익명 2020.06.07 16:38  댓글주소  수정/삭제  댓글쓰기

    비밀댓글입니다

    • Rfriend 2020.06.07 16:53 신고  댓글주소  수정/삭제

      안녕하세요.

      아무래도 부동소수형 표현 제한 때문인듯 합니다.

      명시적으로 0.325 숫자를 써주고 round() 하면 0.32가 나옵니다.
      round(0.325, 2) # 0.32

      하지만 0.2+0.1+0.025=0.325 임에도 불구하고 round() 하면 0.33이 나오는데요, 이걸 부동소수형의 아주 작은 값을 몇개 더 붙인 값으로 테스트를 해보니 어느순간 round() 하면 0.32로 나오네요. 즉, 0.2+0.1+0.025 가 결과 값 표현된 것은 0.325로 사람 눈에 보이지만, R의 메모리에는 0.32500000000000001 (혹은 더 작은 수의 부동소수형이 뒤에 붙어있는 형태)로 저장이 되어있는 것이 아닌가 추측해봅니다.

      round(0.2+0.1+0.025, 2) # 0.33
      round(0.32500000001, 2) # 0.33
      round(0.3250000000000001, 2) #0.33
      round(0.32500000000000001, 2) # 0.32
      round(0.325000000000000001, 2) # 0.32

    • 익명 2020.06.08 11:12  댓글주소  수정/삭제

      비밀댓글입니다