1.4 두 가지 렌더링 접근 방식

모든 장들을 하나의 Rmd 파일로 병합하고 knit하는 것은 bookdown에서 책을 렌더링하는 한 가지 방법입니다. 실제로 다른 방법도 있습니다. R 세션에서 별도의 파일로 각 장을 편성하면 bookdown이 모든 장의 Markdown 출력을 병합하여 책을 렌더링합니다. 우리는 이 두 가지 접근 방식을 각각 “Merge and Knit”(M-K) 및 “Knit and Merge”(K-M)라고 합니다. 이 방법 사이의 차이는 미묘해 보일 수 있지만 사용 사례에 따라 상당히 중요할 수 있습니다.

  • 가장 큰 차이점은 M-K는 하나의 R 세션으로 모든 챕터의 모든 코드 청크를 실행하는 반면, K-M은 개별 챕터에 대해 별도의 R 세션을 사용한다는 것입니다. M-K의 경우 이전 챕터의 R 세션 상태가 이후 챕터로 이월됩니다 (예 : 의도적으로 삭제하지 않는 한 이전 챕터에서 만든 개체를 이후 챕터에서 사용할 수 있음). 반면에, K-M의 경우는 모든 챕터가 서로 분리되어 있습니다2 각 챕터가 깨끗한 상태에서 컴파일되도록 하려면 K-M 접근방법을 사용하는게 좋습니다. M-K 접근 방식을 사용하는 경우 실행 중인 R 세션을 완전히 깨끗한 상태로 복원하는 것은 매우 까다롭고 어려울 수 있습니다. 예를 들어, 이전 장에서 로드한 패키지를 분리/언로드하더라도 R은 이러한 패키지에 등록된 S3 메서드를 정리하지 않습니다.

  • knitr는 소스 문서에서 중복 청크 레이블을 허용하지 않기 때문에 M-K 접근방식을 사용할 때 책 장에 중복 레이블이 없는지 확인해야 합니다. 그렇지 않으면 병합된 Rmd 파일을 knit할 때 knitr에서 오류 신호를 보냅니다. 이것은 전체 책에 중복된 레이블이 있어서는 안된다는 것을 의미합니다. K-M 접근 방식은 단일 Rmd 파일 내에서만 중복 레이블을 허용하지 않습니다.

  • K-M은 Rmd 파일이 하위 디렉터리에 있는 것을 허용하지 않지만 M-K는 허용합니다.

bookdown의 기본 접근방식은 M-K입니다. K-M으로 전환하려면 render_book()을 호출할 때 new_session = TRUE 인수를 사용하거나 구성 파일인 _bookdown.yml에서 new_session: yes를 설정해야 합니다.

K-M 접근 방식을 위해 _bookdown.yml에서 book_filename 옵션을 구성할 수 있지만, 확장자는 실제로 중요하지 않지만 마크다운 파일 이름이어야 하며(예 :_main.md), 심지어 book_filename: _main 처럼 확장자는 생략할 수도 있습니다. 다른 모든 설정은 M-KK-M 모두에서 작동합니다.


  1. 물론 한 장에 일부 파일을 쓰고 다른 장에서 읽을 수도 있지만 그에 따른 부작용을 제거하기는 쉽지 않습니다.↩︎