R의 가장 큰 장점은 간편하게 활용할 수 있는 다양한 패캐지이다. 그러나 이제는 CRAN에 등록된 패키지 수가 2만여 개 정도에 달한다. 우리는 그중에서 어떤 것이 나에게 쓸모 있는지 가려내야 한다.
R에서 pptx를 만들어 내는 패키지도 여럿 존재하였다. 그러나 officer처럼 꾸준한 업데이트와 확장기능을 가진 패키지 또한 드물다.
또한 비슷한 패키지와 비교하여 다운로드 수는 압도적이다.
OfficeR을 써야 하는 이유
만약 4개의 변수를 달리 한 분석 결과를 한 슬라이드 안에서 비교하려고 한다. 이때 하나의 변수당 결과물이 5개라면, 총 20개의 이미지를 슬라이드에 삽입해야 한다. 그러나 한 분석당 결과물이 50개 이상이라면 우리는 200여 개의 이미지를 ppt에 삽입해야 한다. 이는 손목이 꽤나 저린 중노동이 될지 모른다.
본인도 실제 4개의 변수를 통해 저장된 총 240개의 이미지를 ppt에 일일이 첨부하기 귀찮아하던 중에 officer 패키지를 발견하였다. officeR은 office 문서인 word, pptx 등을 R에서 손쉽게 제작할 수 있게 해 준다. 우리는 그중에서 pptx를 만드는 기초 방법에 대해 알아보자.
1. 슬라이드 마스터 편집하기(나만의 ppt 만들기)
위 글에서는 두 가지 이미지를 비교해 보는 슬라이드를 만들어보자.
1) 원하는 디자인의 슬라이드 만들기
(1) pptx 열기
(2) 리본메뉴의 '보기' - '슬라이드 마스터' 클릭
(3) 사용하고자 하는 슬라이드 마스터 편집하기
- 간단한 예시를 위해 맨 위의 슬라이드(모든 슬라이드에 적용되는 테마 설정)와 아래 3개의 슬라이드를 제외하고 삭제하였습니다.
- ppt안의 설명글을 간단한 영단어로 바꾸어 줍니다.
- 슬라이드의 이름을 바꾸어 줍니다. (슬라이드에 커서 → 오른쪽 마우스 클릭 → 레이아웃 이름 바꾸기)
2) 슬라이드 라벨 편집하기
(1) Alt + F10 을 눌러 슬라이드 마스터의 라벨링 확인해 봅시다.
- 각 영역은 고유의 라벨을 가집니다. 이는 R에서 각 영역을 지정해 내용을 첨부할 때 사용됩니다.
(2) 각 영역의 라벨을 같은 영단어로 바꾸자.
- 슬라이드 번호, 바닥글, 날짜는 귀찮으니 메인 영역만 바꾸어봅니다.
- 라벨을 박스의 내용과 같은 이름으로 모두 수정해 주었습니다.
(3) pptx를 저장 후 원하는 위치에 이동시킨다.
2. R에서 officer로 pptx 만들어보기
(1) 패키지 불러오기
library(magrittr)
library(officer)
library(dplyr)
setwd("본인이 원하는 위치 지정")
(2) 빈 pptx 만들어보기
- 내용물이 없는 빈 슬라이드 만들기
read_pptx() %>%
print(target = "./example.pptx")
(3) 수정된 슬라이드 마스터 pptx 불러오기
- 각 슬라이드 마스터의 속성 보기
read_pptx("./Slide_master_example.pptx")%>%
layout_properties()
위 명령어로 각 슬라이드 마스터에 존재하는 테마와 각 내용물의 이름, 타입, 라벨(ph_label)을 알아낼 수 있다.
R에서 각 영역에 이미지나 글을 첨부할 때, Type을 통해 지정할 수도 있고, ph_label을 통해 지정할 수도 있다.
우리는 그중 ph_label을 이용해서 pptx를 만들어 보자/
각 내용은 아래와 같다
[master_name] # 슬라이드 마스터의 테마 이름
[name] # 슬라이드 마스터의 레이아웃 이름
[Type] # pptx의 기본 구성요소
- body : 텍스트 개체 틀
- title : 제목 개체 틀
- subtitle : 부제목
- df : 날짜 개체 틀
- sldNum : 슬라이드 번호 개체 틀
- ftr : 바닥글 개체 틀
[ph_label] # 각 영역의 라벨
- Title # 임의로 수정한 라벨
- Subitle # 임의로 수정한 라벨
- Body # 임의로 수정한 라벨
3. 저장된 이미지를 불러와 pptx로 저장하기
(1) 기본적인 문법 익히기
read_pptx("./Slide_master_example.pptx") %>% # 새로운 피피티를 생성하거나 기존 피피티 불러오기
add_slide("Title","Office 테마") %>% # 원하는 형식의 슬라이드를 추가한다 add_slide("name", "master_name")
ph_with("Title을 지정해 보자",ph_location_label(ph_label = "Title")) %>% # 레이아웃의 ph_label에 맞는 내용 첨가
ph_with(c("2023-07-10", "KSY"),ph_location_label(ph_label = "Subtitle")) %>% # 넣고자 하는 글을 c()로 묶으면 2열로 출력된다
(2) 저장된 이미지를 활용해서 pptx 만들기
read_pptx("./Slide_master_example.pptx") %>%
# Title 레이아웃 이용 이용
add_slide("Title","Office 테마") %>%
ph_with("ppt 제목",ph_location_label(ph_label = "Title")) %>%
ph_with(c("2023-07-10", "KSY"),ph_location_label(ph_label = "Subtitle")) %>%
# Contents 레이아웃 이용
add_slide(layout = "Contents", master = "Office 테마") %>%
ph_with("01. 어떤 내용을 넣어야 할까?", location = ph_location_label(ph_label = "Title")) %>%
ph_with(c("아무 내용이나 일단 넣어라",
"아니면 음식사진을 보여주자"), location = ph_location_label(ph_label = "Body")) %>%
# Compar_sub 레이아웃 이용
add_slide(layout = "Compar_sub", master = "Office 테마") %>%
ph_with("맛있었던 음식",location = ph_location_label(ph_label = "Title")) %>%
ph_with("브런치",location = ph_location_label(ph_label = "Subtitle1")) %>%
ph_with("치킨",location = ph_location_label(ph_label = "Subtitle2")) %>%
ph_with(external_img("./salad.jpg", width = 4, height = 4), location = ph_location_label(ph_label = "Body1")) %>%
ph_with(external_img("./chicken.jpg", width = 4, height = 4),location = ph_location_label(ph_label = "Body2")) %>%
# 저장
print(target = "./Slide_master_example_output.pptx")
(3) R에서 만들어낸 이미지도 추가하기
image_in_r <- ggplot(iris) +
geom_boxplot(aes(x = Species, y = Petal.Width))
read_pptx("./Slide_master_example.pptx") %>%
# Title 레이아웃 이용 이용
add_slide("Title","Office 테마") %>%
ph_with("R에서 만든 이미지도 추가하기",ph_location_label(ph_label = "Title")) %>%
ph_with(c("2023-07-10", "KSY"),ph_location_label(ph_label = "Subtitle")) %>%
# Contents 레이아웃 이용
add_slide(layout = "Contents", master = "Office 테마") %>%
ph_with( image_in_r, location = ph_location_fullsize() ) %>%
# 저장
print(target = "./Slide_master_example_output.pptx")
추가로 알아볼 점
- 이후에는 for문을 통해 일정 형식을 가진 파일을 한 번에 pptx에 저장하는 방법을 알아보자.
- Posit에서 보내는 메일만 봐도 R markdown에서 Python까지 사용 가능하며 범용성이 좋은 Quarto으로 많이 넘어가는 추세인 것 같다. 다음에는 Quarto에 대해 알아보자
참고
- https://www.youtube.com/watch?v=lAuoJfpk-5Q&pp=ugMICgJrbxABGAHKBQxvZmZpY2VyIHBwdHg%3D
- Kim, Jinhwan. 2023. “R의 Officer 패키지를 활용하여 PPT 편집을 위한 벡터 그래픽스 만들기.” July 1, 2023. https://blog.zarathu.com/posts/2023-07-01-officer.
- https://ardata-fr.github.io/officeverse/officer-for-powerpoint.html
- https://ardata-fr.github.io/officer-whyr/#1