18.1 apply() 함수

apply()함수는 행렬이나 데이터 프레임의 행이나 열(이를 margin이라고 합니다)에 함수를 적용하는 데 가장 자주 사용됩니다. 그러나 예를 들어 행렬과 배열의 평균을 구하기 위해 일반 배열과 함께 사용할 수 있습니다. apply() 함수를 사용하는 것이 루프 함수를 사용하는 것보다 빠르지는 않지만 매우 간결하고 한 줄로 작성할 수 있습니다.

apply() 함수의 형식은 다음과 같습니다.

apply(X, MARGIN, FUN, ...)

  • x : 행렬, 데이터 프레임 또는 배열입니다.
  • MARGIN : 함수가 적용될 첨자를 제공하는 벡터입니다. 예를 들어, 배열에서 1은 1차원(행)을, 2는 2차원(열)을, c(1, 2)는 3차원 배열에서 행과 열을 나타냅니다.
  • FUN : 적용할 함수입니다.
  • ... : 함수에 전달되는 다른 인수를 위한 것입니다.

R에서 제공하는 mtcars 데이터 세트를 사용하여 예를 들어 보겠습니다.

# mtcars 데이터 세트의 첫 6개 행을 확인합니다.
head(mtcars)
##                    mpg cyl disp  hp drat    wt  qsec vs am gear carb
## Mazda RX4         21.0   6  160 110 3.90 2.620 16.46  0  1    4    4
## Mazda RX4 Wag     21.0   6  160 110 3.90 2.875 17.02  0  1    4    4
## Datsun 710        22.8   4  108  93 3.85 2.320 18.61  1  1    4    1
## Hornet 4 Drive    21.4   6  258 110 3.08 3.215 19.44  1  0    3    1
## Hornet Sportabout 18.7   8  360 175 3.15 3.440 17.02  0  0    3    2
## Valiant           18.1   6  225 105 2.76 3.460 20.22  1  0    3    1
# 각 열(2차원)의 평균을 구합니다.
apply(mtcars, 2, mean)
##        mpg        cyl       disp         hp       drat         wt       qsec 
##  20.090625   6.187500 230.721875 146.687500   3.596563   3.217250  17.848750 
##         vs         am       gear       carb 
##   0.437500   0.406250   3.687500   2.812500
# 각 행(1차원)의 합계를 구합니다. (이 데이터 세트에서 행의 합이 갖는 의미는 없지만, 
# 행의 합을 구할 수 있음을 보여주기 위해 실행해 봅니다.)
apply(mtcars, 1, sum)
##           Mazda RX4       Mazda RX4 Wag          Datsun 710      Hornet 4 Drive 
##             328.980             329.795             259.580             426.135 
##   Hornet Sportabout             Valiant          Duster 360           Merc 240D 
##             590.310             385.540             656.920             270.980 
##            Merc 230            Merc 280           Merc 280C          Merc 450SE 
##             299.570             350.460             349.660             510.740 
##          Merc 450SL         Merc 450SLC  Cadillac Fleetwood Lincoln Continental 
##             511.500             509.850             728.560             726.644 
##   Chrysler Imperial            Fiat 128         Honda Civic      Toyota Corolla 
##             725.695             213.850             195.165             206.955 
##       Toyota Corona    Dodge Challenger         AMC Javelin          Camaro Z28 
##             273.775             519.650             506.085             646.280 
##    Pontiac Firebird           Fiat X1-9       Porsche 914-2        Lotus Europa 
##             631.175             208.215             272.570             273.683 
##      Ford Pantera L        Ferrari Dino       Maserati Bora          Volvo 142E 
##             670.690             379.590             694.710             288.890
# 각 열(2차원)의 백분위수를 구합니다.
apply(mtcars, 2, quantile, probs = c(0.10, 0.25, 0.50, 0.75, 0.90))
##        mpg cyl    disp    hp  drat      wt    qsec vs am gear carb
## 10% 14.340   4  80.610  66.0 3.007 1.95550 15.5340  0  0    3    1
## 25% 15.425   4 120.825  96.5 3.080 2.58125 16.8925  0  0    3    2
## 50% 19.200   6 196.300 123.0 3.695 3.32500 17.7100  0  0    4    2
## 75% 22.800   8 326.000 180.0 3.920 3.61000 18.9000  1  1    4    4
## 90% 30.090   8 396.000 243.5 4.209 4.04750 19.9900  1  1    5    4