'Error in select() : unused error in select() of dplyr 패키지'에 해당되는 글 1건

  1. 2016.09.25 [R] dplyr 패키지 Error in select() 함수 : unused arguments in select() 이유와 해결방법 (6)

R dplyr 패키지의 select() 함수를 쓰다보면 'Error in select() : Unused arguments in select() error' 가 발생하는 경우가 있는데요, 그 이유와 해결방법 3가지를 소개하겠습니다.

 

 

 

 

먼저 R dplyr 패키지를 로딩하고, 실습 예제로 사용할 MASS 패키지의 Cars93 데이터셋에 대해 살펴보면 아래와 같습니다.  (Cars93은 자동차 93개의 관측치, 차량 정보 27개의 변수를 가진 데이터 프레임).

 

> library(dplyr)
> library(MASS) # dataframe Cars93
> str(Cars93)
'data.frame':	93 obs. of  27 variables:
 $ Manufacturer      : Factor w/ 32 levels "Acura","Audi",..: 1 1 2 2 3 4 4 4 4 5 ...
 $ Model             : Factor w/ 93 levels "100","190E","240",..: 49 56 9 1 6 24 54 74 73 35 ...
 $ Type              : Factor w/ 6 levels "Compact","Large",..: 4 3 1 3 3 3 2 2 3 2 ...
 $ Min.Price         : num  12.9 29.2 25.9 30.8 23.7 14.2 19.9 22.6 26.3 33 ...
 $ Price             : num  15.9 33.9 29.1 37.7 30 15.7 20.8 23.7 26.3 34.7 ...
 $ Max.Price         : num  18.8 38.7 32.3 44.6 36.2 17.3 21.7 24.9 26.3 36.3 ...
 $ MPG.city          : int  25 18 20 19 22 22 19 16 19 16 ...
 $ MPG.highway       : int  31 25 26 26 30 31 28 25 27 25 ...
 $ AirBags           : Factor w/ 3 levels "Driver & Passenger",..: 3 1 2 1 2 2 2 2 2 2 ...
 $ DriveTrain        : Factor w/ 3 levels "4WD","Front",..: 2 2 2 2 3 2 2 3 2 2 ...
 $ Cylinders         : Factor w/ 6 levels "3","4","5","6",..: 2 4 4 4 2 2 4 4 4 5 ...
 $ EngineSize        : num  1.8 3.2 2.8 2.8 3.5 2.2 3.8 5.7 3.8 4.9 ...
 $ Horsepower        : int  140 200 172 172 208 110 170 180 170 200 ...
 $ RPM               : int  6300 5500 5500 5500 5700 5200 4800 4000 4800 4100 ...
 $ Rev.per.mile      : int  2890 2335 2280 2535 2545 2565 1570 1320 1690 1510 ...
 $ Man.trans.avail   : Factor w/ 2 levels "No","Yes": 2 2 2 2 2 1 1 1 1 1 ...
 $ Fuel.tank.capacity: num  13.2 18 16.9 21.1 21.1 16.4 18 23 18.8 18 ...
 $ Passengers        : int  5 5 5 6 4 6 6 6 5 6 ...
 $ Length            : int  177 195 180 193 186 189 200 216 198 206 ...
 $ Wheelbase         : int  102 115 102 106 109 105 111 116 108 114 ...
 $ Width             : int  68 71 67 70 69 69 74 78 73 73 ...
 $ Turn.circle       : int  37 38 37 37 39 41 42 45 41 43 ...
 $ Rear.seat.room    : num  26.5 30 28 31 27 28 30.5 30.5 26.5 35 ...
 $ Luggage.room      : int  11 15 14 17 13 16 17 21 14 18 ...
 $ Weight            : int  2705 3560 3375 3405 3640 2880 3470 4105 3495 3620 ...
 $ Origin            : Factor w/ 2 levels "USA","non-USA": 2 2 2 2 2 1 1 1 1 1 ...
 $ Make              : Factor w/ 93 levels "Acura Integra",..: 1 2 4 3 5 6 7 9 8 10 ...

 

 

 

 

(1) dplyr 패키지 select() 함수, unused arguments() error 가 왜 발생하나?

 

> # Error in select() of dplyr package
> select(Cars93, Price, MPG.highway)
Error in select(Cars93, Price, MPG.highway) : 
  unused arguments (Price, MPG.highway) 

 

dplyr select() 함수를 사용해서 변수를 선택하고 싶은데 위처럼 'Error in select() : unused arguments()' 에러가 발생하는 이유는 'MASS' 패키지의 select()함수와 'dplyr' 패키지의 select() 함수가 충돌하기 때문입니다.

 

 

 

해결 방법은 3가지가 있습니다.

 

(방법 1) dplyr::select()   <= select는 dplyr 패키지의 select 임을 명시적으로 지정

 

> # (a) 1st solution for Error in select() of dplyr package > dplyr::select(Cars93[c(1:6), ], Price, MPG.highway) Price MPG.highway 1 15.9 31 2 33.9 25 3 29.1 26 4 37.7 26 5 30.0 30 6 15.7 31 

 

만약 MASS 패키지의 select() 함수를 쓰고 싶다면 MASS::select() 라고 해주면 됩니다.  매번 select() 함수 앞에 패키지명을 붙이려면 좀 번거롭겠지요?  

 

아래의 (방법 2)로 설정해주면 select() 함수는 계속 dplyr 패키지의 것으로 사용할 수 있게 됩니다.  

 

 

 

 

(방법 2) select <- dplyr::select    <= select는 dplyr 패키지의 select 임을 명시적으로 지정

 

> # (b) 2nd solution for Error in select() of dplyr package > select <- dplyr::select > head(select(Cars93, Price, MPG.highway)) Price MPG.highway 1 15.9 31 2 33.9 25 3 29.1 26 4 37.7 26 5 30.0 30 6 15.7 31 

 

 

 

 

(방법 3) MASS 패키지를 먼저 로딩하고, dplyr 패키지를 나중에 로딩하기

 

> # (c) 3rd solution for Error in select() of dplyr package
> library(MASS) 
> library(dplyr) # dplyr loading after MASS
> head(select(Cars93, Price, MPG.highway))
  Price MPG.highway
1  15.9          31
2  33.9          25
3  29.1          26
4  37.7          26
5  30.0          30
6  15.7          31 

 

어떤 때는 에러가 없다가도 어떤 때는 에러가 발생하는 이유가 패키지 로딩 순서에도 있습니다.  이렇다 보니 R 사용자 입장에서는 '어? 지난번에는 에러가 안났는데...이거 뭐가 잘못된거지?' 하면서 당황하게 되는거 같습니다.

 

MASS 패키지의 select() 함수, pylr 패키지의 summarise() 함수, stats 패키지의 filter() 함수 등이 dplyr 패키지의 동일한 이름의 함수와 충돌하곤 합니다.  패키지간 함수 충돌로 인한 'Error in function : unused arguments'에러가 발생하면 위의 3가지 방법을 이용해서 해결해보세요.

 

 

많은 도움이 되었기를 바랍니다.

 

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

 

Posted by R Friend R_Friend