abs()
abs(x)는 x의 절대값을 반환합니다.
abs(-123)
#> [1] 123
ceiling()
ceiling(x)는 x보다 큰 수 중 가장 작은 정수를 반환합니다.
ceiling(2.5)
#> [1] 3
ceiling(-2.5)
#> [1] -2
floor()
floor(x)는 x보다 작은 수 중 가장 큰 정수를 반환합니다.
floor(2.5)
#> [1] 2
floor(-2.5)
#> [1] -3
trunc()
trunc(x)는 0과 x사이의 가장 큰 정수를 반환합니다.
trunc(2.5)
#> [1] 2
trunc(-2.5)
#> [1] -2
round()
round(x, digits = n)는 x를 소수점 n+1 자리에서 반올림하여 소수점 n번째 자리까지 반환합니다.
만일 digits의 값이 음수이면 10n-1 자리에서 반올림하여 0을 10n 자리까지 만들어 반환합니다. digits 인자의 기본값은 0입니다.
R의 반올림 함수는 국제표준(IEEE 754:2008, ISO/IEC/IEEE 60559:2011)을 따르고 있습니다. 따라서 Excel의 반올림 함수와는 다른 결과 값을 보여줍니다.
예를 들면 Excel에서 =round(2.5, 0)을 하면 3이 나오지만, R에서는 round(2.5, digits = 0)을 하게 되면 2가 나오게 됩니다.
이는 위 부동소숫점 실수와 관련된 국제표준에서 반올림의 모드로 제시된 5가지 방법 중 짝수로 반올림(round to nearest, ties to even)를 기본모드로 선택하였기 때문입니다.
’짝수로 반올림’ 모드는 ‘은행원의 반올림’, ’오사오입’이라고도 불리우는 방법으로 반올림으로 인한 오류의 기대값을 0으로 하는 효과가 있습니다.
이 방법은 가장 가까운 표현 가능한 숫자로 반올림하되, 원래 값이 가능한 숫자 두 개의 중간에 걸쳐 있으면 둘 중 가수부의 마지막 자리가 짝수인 값으로 반올림합니다.
예를 들면 52.5는 52, 51.5는 52로 반올림합니다.
round(.5 + -3:4)
#> [1] -2 -2 0 0 2 2 4 4
round(2.2579, digits = 2)
#> [1] 2.26
round(2578.23, digits = -2)
#> [1] 2600
signif()
signif(x, digits = n)는 지정한 유효숫자(significant digits)인 n만큼 자리수를 만들어 반올림 합니다. digits 인자의 기본값은 6입니다. 숫자들의 열을 깔끔하게 맞추고자 할 때 많이 사용합니다.
signif(3.141593, digits = 3)
#> [1] 3.14
signif(23.593, digits = 3)
#> [1] 23.6
sqrt()
sqrt(x)는 x의 제곱근을 반환합니다.
sqrt(9)
#> [1] 3
로그함수
- log(x)는 밑이 e인 x의 자연로그값을 반환합니다.
- log10(x)은 밑이 10인 x의 상용로그값을 반환합니다.
- log2(x)는 밑이 2인 x의 이진로그값을 반환합니다.
- log(x, base) 밑이 base인 x의 로그값을 반환합니다.
- log1p(x)는 밑이 e인 x+1의 자연로그값을 반환합니다.
log(3)
#> [1] 1.1
log10(3)
#> [1] 0.477
log2(3)
#> [1] 1.58
log(3, 5)
#> [1] 0.683
log(0)
#> [1] -Inf
log1p(0)
#> [1] 0
exp()
- exp(x)는 상수 e를 x만큼 제곱한 값을 반환합니다.
- expm1(x)는 상수 e를 x만큼 제곱한 값에서 1을 뺀 값을 반환합니다.
exp(3)
#> [1] 20.1
exp(log(3))
#> [1] 3
expm1(3)
#> [1] 19.1
삼각함수
- cos(x)는 x 라디안 각도의 코사인 값을 반환한다.
- sin(x)는 x 라디안 각도의 사인 값을 반환한다.
- tan(x)는 x 라디안 각도의 탄젠트 값을 반환한다.
- acos(x), asin(x), atan(x), atan2(x)는 역삼각함수입니다.
- cospi(x), sinpi(x), tanpi(x) 는 pi*x의 삼각함수입니다. 입력이 pi의 배수일 때 정밀한 계산을 위해 사용합니다.
sin(pi)
#> [1] 1.22e-16
sin(1)
#> [1] 0.841
sinpi(3)
#> [1] 0
asin(1)
#> [1] 1.57
# 사인 곡선 (Sign Curve)
x <- seq(-10, 10, 0.1)
plot(x, sin(x), type = "l", col = "blue",
ylab = "", xlab = "", main = "삼각함수 그래프")
lines(x, cos(x), type = "l", col = "red")
legend("topleft", c("sin(x)", "cos(x)"), fill=c("blue", "red"))
# 삼각함수 그래프
x <- seq(0, 2*pi, 0.1)
plot(x, sin(x), type = "l", col = "blue",
ylab = "", xlab = "", main = "사인 곡선")
누적함수
- cumsum(x) x 벡터의 누적 합 벡터를 반환합니다.
- cumprod(x) x 벡터의 누적 곱 벡터를 반환합니다.
- cummax(x) x 벡터의 누적 최대값 벡터를 반환합니다.
- cummin(x) x 벡터의 누적 최소값 벡터를 반환합니다.
cumsum(1:10)
#> [1] 1 3 6 10 15 21 28 36 45 55
cumprod(1:9)
#> [1] 1 2 6 24 120 720 5040 40320 362880
# 오른쪽으로 숫자를 이동하면서 과거 지나온 숫자를 비교하여 최대 또는 최소값을 반환
(x <- c(3:1, 2:0, 4:2))
#> [1] 3 2 1 2 1 0 4 3 2
cummax(x)
#> [1] 3 3 3 3 3 3 4 4 4
cummin(x)
#> [1] 3 2 1 1 1 0 0 0 0
sum()
sum(x, na.rm = FALSE)는 x벡터의 합계를 반환합니다.
sum(1:5)
#> [1] 15
sum(1:5, NA)
#> [1] NA
sum(1:5, NA, na.rm = TRUE)
#> [1] 15
diff()
diff(x, lag = 1, differences = 1)는 두 수의 차이값을 반환합니다. lag 인수는 두 수의 간격을 나타냅니다. lag = 2이면 두 칸 간격의 두 수 차이입니다. differences 인수는 차분의 차수입니다. differences = 2이면 차분을 두번한 값을 반환합니다.
x <- c(1, 5, 10, 16, 23)
diff(x) # 5-1, 10-5, ...
#> [1] 4 5 6 7
diff(x, lag = 2) # 10-1, 16-5, ...
#> [1] 9 11 13
diff(x, differences = 2) # diff(diff(x)), (10-5)-(5-1), ...
#> [1] 1 1 1
prod()
prod(x, na.rm = FALSE)는 x 벡터의 곱을 반환합니다.
prod(2, 3, 5) # 2*3*5
#> [1] 30
prod(c(2, 3, 5, NA), na.rm = TRUE)
#> [1] 30
prod(1:5) # 1*2*3*4*5
#> [1] 120
gamma(6) # 1*2*3*4*5
#> [1] 120
factorial(5) # 1*2*3*4*5
#> [1] 120
gamma(), factorial()
감마함수(gamma function)는 오일러(Leonhard Euler)가 정수만 적용되는 n!을 실수로 확장하기 위해 제안한 함수입니다.
- gamma(x)는 x-1의 계승값을 반환합니다. 즉 gamma(x)는 factorial(x-1)과 동일합니다.
- factorial(x)는 x의 계승값을 반환합니다.
gamma(6)
#> [1] 120
factorial(5)
#> [1] 120
gamma(5.32)
#> [1] 39.3
factorial(4.32)
#> [1] 39.3
# lgamma()는 gamma()의 결과값에 자연로그를 적용하는 함수
lgamma(6)
#> [1] 4.79
log(gamma(6))
#> [1] 4.79
# lfactorial()은 factorial()의 결과값에 자연로그를 적용하는 함수
lfactorial(5)
#> [1] 4.79
log(factorial(5))
#> [1] 4.79
lgamma(5+1)
#> [1] 4.79
gamma() 함수와 연관된 함수는 lgamma() 외에도 psigamma(x, deriv = 0), digamma(x), trigamma(x)가 있습니다.
beta()
베타함수는 감마함수를 만든 오일러가 만든 함수입니다. 감마보다 먼저 만들어진 함수라서 알파, 베타, 감마의 순서에 따라 베타함수로 이름이 지어졌습니다. 베타함수는 이항계수의 일반화라고 할 수 있습니다.
beta(2, 5)
#> [1] 0.0333
choose()
choose(n, k)는 n개에서 순서에 상관없이 k개를 뽑는 경우의 수를 반환합니다. 수식은 n!/(n−k)!k! 입니다.
choose(5, 2)
#> [1] 10
# 로또 확률 (45개 중 순서에 상관없이 6개 뽑기)
choose(45, 6)
#> [1] 8145060
복소수 함수
R에서는 복소수 관련 연산이나 함수를 지원합니다.
- Re(x)는 복소수 x의 실수(Real) 부분을 반환합니다.
- Im(x)는 복소수 x의 허수(Imaginary) 부분을 반환합니다.
- Mod(x)는 복소수 x의 절대값(modulus)을 반환합니다.
- Arg(x)는 복소수 x의 편각(argument)을 반환합니다.
- Conj(x)는 복소수 x의 공액 복소수(허수부의 부호만 바뀐 복소수)를 반환합니다.
x <- 2 + 3i
Re(x)
#> [1] 2
Im(x)
#> [1] 3
Mod(x)
#> [1] 3.61
Arg(x)
#> [1] 0.983
Conj(x)
#> [1] 2-3i
집합 함수
- union(x, y)는 x와 y의 합집합을 반환합니다.
- intersect(x, y)는 x와 y의 교집합을 반환합니다.
- setdiff(x, y)는 x에 있고 y에는 없는 (x-y)차집합을 반환합니다.
- setequal(x, y)는 x와 y가 같은지 비교검사 결과를 반환합니다.
- is.element(el, set)는 el에 있는 각 원소들이 set집합에 포함되는지를 검사합니다. x %in% y와 동일합니다.
set.seed(123)
(x <- c(sort(sample(1:20, 9)), NA))
#> [1] 2 3 5 6 10 11 14 15 19 NA
(y <- c(sort(sample(3:23, 7)), NA))
#> [1] 5 7 10 11 12 16 22 NA
union(x, y) # 합집합
#> [1] 2 3 5 6 10 11 14 15 19 NA 7 12 16 22
intersect(x, y) # 교집합
#> [1] 5 10 11 NA
setdiff(x, y) # 차집합(x-y)
#> [1] 2 3 6 14 15 19
setdiff(y, x) # 차집합(y-x)
#> [1] 7 12 16 22
setequal(x, y) # 비교
#> [1] FALSE
is.element(x, y)
#> [1] FALSE FALSE TRUE FALSE TRUE TRUE FALSE FALSE FALSE TRUE
x %in% y # is.element(x, y)와 동일
#> [1] FALSE FALSE TRUE FALSE TRUE TRUE FALSE FALSE FALSE TRUE
all(is.element(x, y)) # x가 y에 모두 포함되어 있으면 TRUE
#> [1] FALSE
푸리에 함수
- fft(x, inverse = FALSE)는 x의 고속 푸리에 변환 값을 반환합니다.
- mvfft(x, inverse = FALSE)는 행렬 x의 각 열의 고속 푸리에 변환 값을 반환합니다.
- filter(x, filter)는 시계열에 선형 필터를 적용합니다.
- convolve(x, y)
(x <- matrix(c(1, 2, 3, 2, 20, 26, 3, 26, 38), nrow = 3))
#> [,1] [,2] [,3]
#> [1,] 1 2 3
#> [2,] 2 20 26
#> [3,] 3 26 38
fft(x)
#> [,1] [,2] [,3]
#> [1,] 121.0+ 0.0i -51.5+16.5i -51.5-16.5i
#> [2,] -51.5+16.5i 19.0-13.9i 28.0- 0.0i
#> [3,] -51.5-16.5i 28.0+ 0.0i 19.0+13.9i
mvfft(x)
#> [,1] [,2] [,3]
#> [1,] 6.0+0.00i 48+0.0i 67+ 0.0i
#> [2,] -1.5+0.87i -21+5.2i -29+10.4i
#> [3,] -1.5-0.87i -21-5.2i -29-10.4i
x <- 1:5
filter(x, rep(1, 3), method="recursive")
#> Time Series:
#> Start = 1
#> End = 5
#> Frequency = 1
#> [1] 1 3 7 15 30
'R' 카테고리의 다른 글
[R 프로그래밍] 논리 함수 (0) | 2022.12.26 |
---|---|
[R 프로그래밍] 행렬 함수 (0) | 2022.12.26 |
[R 프로그래밍] while() (0) | 2022.12.22 |
[R 프로그래밍] while() (0) | 2022.12.22 |
[R 프로그래밍] for() (0) | 2022.12.22 |