2 min read

dplyr 1.0.0 업데이트 리뷰


출처: dplyr 1.0.0 is coming soon


dplyr 1.0.0 버전업 리뷰

dplyr이 0.8.9버전에서 1.0.0버전으로 업데이트를 할 예정이다. tidyverse의 blog를 보니 2020/03/09기준으로 4~6주 후에 CRAN에 등록 된다고 하니 4월 중순에서 말즘이나 되어야 정식 버전을 사용할 수 있을것 같다. 한참남은 정식버전까지 많은것들이 다시 바뀔수 있지만 이번 1.0.0에서의 변경사항에대해 간단하게 적어보려고 한다. 참고한 내용은 다음과 같다.

새로운 기능

이번 업데이트에 대표적인 주요 새로운 기능을 소개 하도록 한다.

rowwise()

  • 행방향 연산 summarise()mutate()를 대체 할수 있는 c_across()를 선보인다고 한다. 자세한 사항은 다음 링크를 확인해보자.

colwise

  • 열방향 연산 summarise()mutate()를 대체 할수 있는 across()를 선보인다고 한다. 자세한 사항은 다음 링크를 확인해보자.

summarise

summarise()이제 단일 요약에서 여러 열 및 / 또는 여러 행을 쉽게 만들 수 있습니다 ?summarise.

  • summarise()함수를 이용하여 두개 이상의 요약 정보를 생산할수 있다. 자세한 사항은 다음 링크를 확인해보자.

select

  • select()rename()함수에서 이제 논리연산자와 class확인 함수를 사용할 수 있다. 자세한 사항은 다음 링크를 확인해보자.

dplyr내부 메커니즘

기존 C++ 기반으로 적용되던 dplyr이 vctrs패키지 기반으로 사용된다고 한다. dplyr에서 vctrs를 사용하면 다음의 장/단점이 있다고 한다.

  • 주요 장점
    • R에서 훨씬 더 많은 dplyr을 구현할 수있어 프로토 타이핑이 더 빨라지게 된다.
    • C++기반의 코드에 의존하지 않기 때문에 BH, Rcpp에 독립할 수가 있다. 기존에 dplyr은 속도를 높히기위해 Rcpp, BH패키지를 같이 사용 했으나 사용하지 않게 된다. 특히 BH패키지는 매우 무겁다.(참고: BH는 Boost C++ Header Files의 줄임말이며 파일이 10,000개가 넘는다.)
  • 주요 단점
    • C++기반에서 vctrs로 전체적으로 바꾸면서, 미처 발견하지 못한 사소한 오류로 속도가 상당히 느리거나 오류가 있는 코드가 존재할 수 있다.
    • 에러가 있다면 깃헙에 이슈제보를 하는것이 좋을것 같다.

물론 C++이 더 좋을 수는 있으나, vctrs를 사용하는 것이 단점보다 장점이 더 크다고 dplyr 개발진은 말하고 있다.
보다 자세한 내용은 vctrs 페이지를 참조.

제거된 함수 목록

이번 1.0.0에 제거되는 함수 목록들이다.

  • id()

  • failwith()

  • tbl_cube()

  • rbind_all()

  • rbind_list()

  • dr_dplyr()

주요 삭제 검토사항

이번 1.0.0에서 개발진이 고지한 관련사항은 다음과 같다.

  • add_count()drop인자는 출력에 영향을 주지 않기 때문에 제거 예정.

  • add_rownames()대신 tibble::rownames_to_column() 사용

  • as.tbl(), tbl_df()대신 as_tibble() 사용

  • bench_tbls(), compare_tbls(), compare_tbls2(), eval_tbls(), eval_tbls2()은 실용성 문제로 재검토 예정

  • combine()대신 vctrs::vec_c() 사용

  • funs()대신 list() 사용

  • group_by(add = )대신 .add사용

  • group_by(.dots = )/group_by_prepare(.dots = )대신 !!! 사용

주요대체 예정사항

  • do()summaris()로 대체 예정

  • sample_n()sample_frac()slice_sample()로 대체 예정

  • top_n()slice_min()slice_max()로 대체 예정.

    • ※:top_n은 기존 head()와 같다