ADP (R)

[R] factor() vs as.factor()

멋쟁이천재사자 2022. 10. 28. 18:27

factor() 와 as.factor() 두 가지가 완전히 동일한 줄 알았습니다.

 

as.factor() 를 사용하다 에러가 뜨는 경우를 만났습니다.

이것을 해결하기 위해 이것 저것 엉뚱한 것들을 시도해보았습니다.

factor() 와 as.factor() 와 같은 줄 알고 factor()로는 시도조차 안 해보다가, factor() 로 바꾸면 해결되는 것을 알았을 때 어이가 없었습니다.


인터넷 검색을 해보았는데 나름 정리가 잘된 글을 보았습니다.

그렇다면 R 프로그램에서 범주형 변수를 생성할 수 있는 두 함수, factor와 as.factor의 차이점은 무엇일까?
둘 다 factor를 생성할 수 있고 level을 지정할 수 있다. 그렇지만 as.factor는 원래 factor가 아닌 데이터형을 factor로 만들기 위해 사용되는 함수이다.
[출처] factor()와 as.factor()|작성자 솜돌

 

정리가 잘 된 글인 것 같지만 아직도 충분히 이해가 되지 않아 R document 를 보았습니다.


?as.factor

설명서를 찾아보았습니다.

as.factor 와  factor 가 각각 있을 줄 알았는데 factor 설명서 하나입니다.

 

Examples 에 있는 두 가지 샘플을 보았습니다.

factor(c(1:2, NA), exclude =  "" )
factor(letters[1:20], labels = "letter")

 

예제 스크립트를 as.factor 로 시도해보았습니다.

unused argument 에러가 납니다. 애초에 경험했던 바로 그 에러입니다.


as.factor(c(1:2, NA), exclude =  "" )
Error in as.factor(c(1:2, NA), exclude = "") : 
  unused argument (exclude = "")

as.factor(letters[1:20], labels = "letter")

Error in as.factor(letters[1:20], labels = "letter") : 
  unused argument (labels = "letter")


Usage

factor(x = character(), levels, labels = levels,
       exclude = NA, ordered = is.ordered(x), nmax = NA)

...

as.factor(x)

 

 

is.factor, is.ordered, as.factor and as.ordered are the membership and coercion functions for these classes.
as.factor coerces its argument to a factor. It is an abbreviated (sometimes faster) form of factor.


여기까지 공부해서 얻은 결론은 as.factor 에는 인자가 1개만 올 수 있어서 추가적인 인수가 오면 에러가 나고, 형변환 용도로 사용된다는 것입니다.

 

그렇다면 인수가 오직 하나인 경우 즉, as.factor(x) 와 factor(x) 는 완벽히 동일한 것일까요?

답은 아직 모르겠습니다.