2.11 웹 페이지와 Shiny 앱

HTML 위젯과 마찬가지로 임의의 웹 페이지를 책에 삽입할 수 있습니다. knitr::include_url()함수를 사용하여 URL을 통해 웹 페이지를 포함할 수 있습니다. 출력 형식이 HTML인 경우 iframe이 사용됩니다.9 다른 경우에는 knitr는 웹 페이지의 스크린 샷을 찍으려고 합니다 (또는 제공한 사용자 지정 스크린 샷 사용). 모든 청크 옵션은 HTML 위젯의 옵션과 동일합니다. 특별한 주의가 필요한 옵션 중 하나는 delay 옵션입니다. HTML 위젯은 로컬로 렌더링되므로 일반적으로 PhantomJS가 스크린 샷을 찍기 위해 로드하는 것이 빠르지 만 임의의 URL은 로드하는 데 더 오래 걸릴 수 있으므로 사용하는 것이 좋습니다. 더 큰 delay 값, 예를 들어 chunk 옵션 screenshot.opts = list (delay = 5)를 사용하기 바랍니니다.

관련 함수는 knitr::include_app() 함수로 include_url()과 매우 유사하며 URL을 통해 Shiny 앱을 출력에 포함하도록 설계되었습니다. include_url()과의 유일한 차이점은 URL에 다른 쿼리 매개 변수가 없는 경우 스크린 샷이나 iframe에 유용하지 않을 수 있는 Shiny 쇼케이스 모드를 비활성화하기 위해 URL에 쿼리 매개 변수 ?showcase=0을 자동으로 추가한다는 것입니다. 쇼케이스 모드를 원한다면 include_app ()대신에 include_url()을 사용하기 바랍니다.

아래는 Shiny 앱의 예입니다 (그림 2.6) :

knitr::include_url("https://yihui.org")

Figure 2.6: miniUI 패키지로 생성된 Shiny 앱; https://yihui.shinyapps.io/miniUI/ 에서 실시간 버전을 볼 수 있다.

# knitr::include_app("https://yihui.shinyapps.io/miniUI/")

다시 말하지만 이 책의 HTML 버전을 읽는 경우 라이브 앱이 표시되고 다른 유형의 형식을 읽는 경우 정적 스크린 샷이 표시됩니다. 위의 Shiny 앱은 miniUI 패키지 (Cheng 2018)를 사용하여 생성되었는데, 작은 화면의 Shiny 앱에 특히 좋은 레이아웃 기능을 제공합니다. 일반적인 Shiny 레이아웃 기능을 사용하는 경우 페이지 크기가 너무 커서 iframe에 맞지 않기 때문에 iframe에 가로/세로 스크롤바가 표시될 수 있습니다. iframe의 기본 너비가 너무 작으면 out.width 청크 옵션을 사용하여 변경할 수 있습니다. iframe의 높이는 include_url() / include_app()height 인수를 사용합니다.

Shiny 앱은 일반적인 URL보다 로드하는 데 더 오래 걸릴 수 있습니다. 예를 들어, 10과 같이 delay 옵션에 대해 보수적인 값을 사용할 수 있습니다. 말할 필요도 없이 include_url()include_app()에는 이전에 청크를 캐시하지 않은 경우 작동하는 인터넷 연결을 요구합니다(그러나 웹 iframe 내웁의 웹 페이지는 인터넷 연결 없이는 여전히 작동하지 않습니다).


  1. iframe은 기본적으로 하나의 웹 페이지에 다른 웹 페이지를 삽입하는 상자입니다.↩︎