<?xml version="1.0" encoding="utf-8" standalone="yes"?><rss version="2.0" xmlns:atom="http://www.w3.org/2005/Atom"><channel><title>R | JDW Blog</title><link>https://www.jdwblog.com/tags/r/</link><atom:link href="https://www.jdwblog.com/tags/r/index.xml" rel="self" type="application/rss+xml"/><description>R</description><generator>HugoBlox Kit (https://hugoblox.com)</generator><language>ko-KR</language><lastBuildDate>Tue, 24 Oct 2023 00:00:00 +0000</lastBuildDate><image><url>https://www.jdwblog.com/media/icon_hu_c964a8c093305932.png</url><title>R</title><link>https://www.jdwblog.com/tags/r/</link></image><item><title>코랩에서 Rstudio 사용하기 1. Rstudio-server 설치하기</title><link>https://www.jdwblog.com/post/rstudio-1-rstudio-server/</link><pubDate>Tue, 24 Oct 2023 00:00:00 +0000</pubDate><guid>https://www.jdwblog.com/post/rstudio-1-rstudio-server/</guid><description>&lt;p&gt;
&lt;figure &gt;
&lt;div class="flex justify-center "&gt;
&lt;div class="w-full" &gt;
&lt;img alt=""
srcset="https://www.jdwblog.com/post/rstudio-1-rstudio-server/images/colab_logo_hu_9b39055ef7b22fab.webp 224w"
sizes="(max-width: 480px) 100vw, (max-width: 768px) 90vw, (max-width: 1024px) 80vw, 760px"
src="https://www.jdwblog.com/post/rstudio-1-rstudio-server/images/colab_logo_hu_9b39055ef7b22fab.webp"
width="224"
height="224"
loading="lazy" data-zoomable /&gt;&lt;/div&gt;
&lt;/div&gt;&lt;/figure&gt;
&lt;/p&gt;
&lt;p&gt; 최근 &lt;U&gt;&lt;em&gt;나만의 딥러닝 워크스테이션 구성하기&lt;/em&gt;&lt;/U&gt; 프로젝트를 진행하면서 다방면으로 찾아보던 중 문득 &lt;strong&gt;Colab&lt;/strong&gt;을 통해 &lt;code&gt;Rstudio&lt;/code&gt;를 구동할 수 있지 않을까 싶었다. 그래서 찾아보니까 실제로 나와 같은 생각을 한 사람이 있었고, 직접 테스트를 진행해보니 성공적으로 Colab의 리소스로 &lt;code&gt;Rstudio&lt;/code&gt;를 오픈 시킬 수 있어서 이를 소개하고자 한다.&lt;/p&gt;
&lt;h1 id="google-colaboratory"&gt;Google Colaboratory&lt;/h1&gt;
&lt;p&gt;  &lt;strong&gt;
&lt;/strong&gt;(이하 코랩)은 구글에서 제공하는 데이터 사이언스와 머신러닝을 위한 클라우드 기반 &lt;code&gt;Python&lt;/code&gt; 개발 환경이다. 코랩의 장점은 여러가지 있지만 아무래도 &lt;strong&gt;무료&lt;/strong&gt;로 &lt;code&gt;Jupyter notebook&lt;/code&gt;을 사용할 수 있는 점을 꼽을 수 있겠다. 물론 free tier로 사용시에 리소스의 제한이 꽤나 엄격하지만 그래도 인터넷이 연결이 되고 &lt;code&gt;Python&lt;/code&gt;을 다룰줄만 안다면 장소에 구애받지 않고 어디서든 작업을 할 수 있는 부분에 있어서는 유용한 서비스다.&lt;/p&gt;
&lt;p&gt;  코랩은 기본적으로 &lt;strong&gt;Ubuntu&lt;/strong&gt; 기반의 가상머신에서 서버 리소스가 할당되어 사용되는 구조인듯 싶다. 코랩에서 사용되는 OS에 대한 기본 정보는 &lt;code&gt;Jupyter notebook&lt;/code&gt;의 매직 명령어를 활용하여 확인할 수 있다.&lt;/p&gt;
&lt;div class="highlight"&gt;&lt;pre tabindex="0" class="chroma"&gt;&lt;code class="language-bash" data-lang="bash"&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;!cat /etc/*release
&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;div class="highlight"&gt;&lt;pre tabindex="0" class="chroma"&gt;&lt;code class="language-fallback" data-lang="fallback"&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;DISTRIB_ID=Ubuntu
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;DISTRIB_RELEASE=22.04
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;DISTRIB_CODENAME=jammy
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;DISTRIB_DESCRIPTION=&amp;#34;Ubuntu 22.04.2 LTS&amp;#34;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;PRETTY_NAME=&amp;#34;Ubuntu 22.04.2 LTS&amp;#34;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;NAME=&amp;#34;Ubuntu&amp;#34;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;VERSION_ID=&amp;#34;22.04&amp;#34;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;VERSION=&amp;#34;22.04.2 LTS (Jammy Jellyfish)&amp;#34;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;VERSION_CODENAME=jammy
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;ID=ubuntu
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;ID_LIKE=debian
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;HOME_URL=&amp;#34;https://www.ubuntu.com/&amp;#34;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;SUPPORT_URL=&amp;#34;https://help.ubuntu.com/&amp;#34;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;BUG_REPORT_URL=&amp;#34;https://bugs.launchpad.net/ubuntu/&amp;#34;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;PRIVACY_POLICY_URL=&amp;#34;https://www.ubuntu.com/legal/terms-and-policies/privacy-policy&amp;#34;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;UBUNTU_CODENAME=jammy
&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;br&gt;
&lt;div class="callout flex px-4 py-3 mb-6 rounded-md border-l-4 bg-blue-100 dark:bg-blue-900 border-blue-500"
data-callout="note"
data-callout-metadata=""&gt;
&lt;span class="callout-icon pr-3 pt-1 text-blue-600 dark:text-blue-300"&gt;
&lt;svg height="24" xmlns="http://www.w3.org/2000/svg" viewBox="0 0 24 24"&gt;&lt;path fill="none" stroke="currentColor" stroke-linecap="round" stroke-linejoin="round" stroke-width="1.5" d="m16.862 4.487l1.687-1.688a1.875 1.875 0 1 1 2.652 2.652L6.832 19.82a4.5 4.5 0 0 1-1.897 1.13l-2.685.8l.8-2.685a4.5 4.5 0 0 1 1.13-1.897zm0 0L19.5 7.125"/&gt;&lt;/svg&gt;
&lt;/span&gt;
&lt;div class="callout-content dark:text-neutral-300"&gt;
&lt;div class="callout-title font-semibold mb-1"&gt;Note&lt;/div&gt;
&lt;div class="callout-body"&gt;&lt;p&gt;본격적으로 들어가기에 앞서 본 포스팅은 해당
를 활용하여 작성되었음을 알립니다.&lt;/p&gt;&lt;/div&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;h1 id="rstudio-server-설치"&gt;Rstudio-server 설치&lt;/h1&gt;
&lt;p&gt;  기본적인 접근은 다음과 같다. 먼저 코랩 자체가 &lt;code&gt;Ubuntu&lt;/code&gt;환경에서 실행되는 만큼 리눅스 우분투용 R과 Rstudio를 설치한다. 일반적으로 Ubuntu 환경 하에서는 로컬 웹 기반 &lt;code&gt;Rstudio-server&lt;/code&gt;를 설치하여 활용하는데, 설치를 마치고 설치된 해당 주소와 포트를 터널링을 통해 접근하는 방식으로 진행된다. 각자 코랩을 켜서 아래의 &lt;strong&gt;code-chunk&lt;/strong&gt;를 복사하여 셀 바이 셀로 실행시켜 나가면 된다.&lt;/p&gt;
&lt;h2 id="1-rstudio-유저-추가"&gt;1. &lt;strong&gt;rstudio&lt;/strong&gt; 유저 추가&lt;/h2&gt;
&lt;div class="highlight"&gt;&lt;pre tabindex="0" class="chroma"&gt;&lt;code class="language-bash" data-lang="bash"&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;!sudo useradd --create-home --user-group --password &lt;span class="k"&gt;$(&lt;/span&gt;&lt;span class="nb"&gt;echo&lt;/span&gt; &lt;span class="s1"&gt;&amp;#39;1234&amp;#39;&lt;/span&gt; &lt;span class="p"&gt;|&lt;/span&gt; openssl passwd -1 -stdin&lt;span class="k"&gt;)&lt;/span&gt; rstudio
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;!usermod -aG sudo rstudio
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;!su rstudio -c &lt;span class="s1"&gt;&amp;#39;echo 1234 | sudo -S chmod -R 777 /var/log&amp;#39;&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;p&gt;  먼저 우분투 환경에서 &lt;strong&gt;&amp;ldquo;rstudio&amp;rdquo;&lt;/strong&gt; 사용자를 생성하고 &lt;code&gt;sudo&lt;/code&gt; 권한을 부여한다. 이는 &lt;code&gt;rstudio-server&lt;/code&gt; 로그인에 필요한 과정이다.
  마지막 세번째 줄에 있는 &lt;code&gt;!su rstudio -c 'echo 1234 | sudo -S chmod -R 777 /var/log'&lt;/code&gt;코드는 지금은 직접적인 연관이나 필요는 없지만 추후에 진행할 &lt;code&gt;tensorflow-R&lt;/code&gt;을 설치할때 필요로 하기 때문에 미리 처리를 해 놓음.&lt;/p&gt;
&lt;p&gt;  비밀번호의 경우 현재 &lt;em&gt;1234&lt;/em&gt;로 세팅을 해 놓았는데 혹시라도도 &lt;code&gt;rstudio-server&lt;/code&gt; 로그인 비밀번호를 바꾸고 싶다하면 코드에 있는 &lt;em&gt;1234&lt;/em&gt;를 원하시는 비밀번호로 적어서 실행시키면 된다.&lt;/p&gt;
&lt;h2 id="2-필수-프로그램-설치"&gt;2. 필수 프로그램 설치&lt;/h2&gt;
&lt;h3 id="gis-software"&gt;GIS software&lt;/h3&gt;
&lt;div class="highlight"&gt;&lt;pre tabindex="0" class="chroma"&gt;&lt;code class="language-bash" data-lang="bash"&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;%%capture &lt;span class="c1"&gt;# 출력 생략 &lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;!apt-get update
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;!apt-get install --yes git ssh python3-venv
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;!apt-get install r-base r-base-dev gdal-bin python-gdal python3-gdal libgdal-dev libproj-dev proj-data proj-bin libgeos-dev libudunits2-dev libv8-dev libprotobuf-dev libxml2 libjq-dev
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;!apt-get install qgis saga
&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;ul&gt;
&lt;li&gt;&lt;code&gt;R&lt;/code&gt; 설치와 더불어 &lt;code&gt;python3&lt;/code&gt; 가상환경 모듈 및 지리 정보 및 공간 데이터 시각화를 위한 연계 패키지들을 설치&lt;/li&gt;
&lt;/ul&gt;
&lt;h3 id="github-cli"&gt;Github CLI&lt;/h3&gt;
&lt;div class="highlight"&gt;&lt;pre tabindex="0" class="chroma"&gt;&lt;code class="language-bash" data-lang="bash"&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;%%capture
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;!apt-key adv --keyserver keyserver.ubuntu.com --recv-key C99B11DEB97541F0
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;!echo &lt;span class="p"&gt;|&lt;/span&gt; sudo apt-add-repository https://cli.github.com/packages
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;!apt update
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;!apt install gh
&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;ul&gt;
&lt;li&gt;&lt;code&gt;Github&lt;/code&gt; 사용을 위한 &lt;code&gt;Github CLI(명령줄 인터페이스)&lt;/code&gt; 패키지 설치&lt;/li&gt;
&lt;/ul&gt;
&lt;h3 id="rstudio-server"&gt;rstudio server&lt;/h3&gt;
&lt;div class="highlight"&gt;&lt;pre tabindex="0" class="chroma"&gt;&lt;code class="language-bash" data-lang="bash"&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;%%capture
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;!apt-get install gdebi-core
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;!wget https://download2.rstudio.org/server/focal/amd64/rstudio-server-2023.09.1-494-amd64.deb
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;!sudo gdebi rstudio-server-2023.09.1-494-amd64.deb
&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;ul&gt;
&lt;li&gt;&lt;code&gt;rstudio-server&lt;/code&gt; 설치 진행&lt;/li&gt;
&lt;li&gt;업데이트 시 배포되는 &lt;code&gt;rstudio-server&lt;/code&gt; 버전이 바뀌므로 최신 버전으로 사용을 원한다면
에서 최신 버전의 코드로 바꿔서 실행&lt;/li&gt;
&lt;/ul&gt;
&lt;img src="images/install-rstudio.png" alt="rstudio-server posit 다운로드" width="50%"/&gt;
&lt;center&gt;
&lt;p&gt;&lt;em&gt;&amp;lt;rstudio-server posit 다운로드 페이지&amp;gt;&lt;/em&gt;&lt;/p&gt;
&lt;/center&gt;
&lt;h3 id="ngrok-토큰-발급"&gt;ngrok 토큰 발급&lt;/h3&gt;
&lt;p&gt;  다음으로 진행해야 할 것으로 &lt;code&gt;ngork&lt;/code&gt; 서비스 관련 사항들이다. &lt;code&gt;ngork&lt;/code&gt;는 로컬의 개발환경을 인터넷으로 공개적으로 접근 가능하게 만들어주는 터널링(Tunneling) 서비스라고 한다. 주로 시스템 혹은 웹 개발시 테스트의 용도나 디버깅 작업을 수행하는데 사용되는 서비스인데 우리는 이것을 통해 코랩 내부의 &lt;code&gt;rstudio-server&lt;/code&gt; 로컬 주소 및 포트를 접근할 수 있는 주소를 만드는데 사용할 것.
다음에 사이트에서 ngork 가입 및 토큰을 발급을 진행하면 된다.&lt;/p&gt;
&lt;img src="images/ngork_auth.png" alt="ngork account 토큰 발급" width="50%"/&gt;
&lt;center&gt;
&lt;p&gt;&lt;em&gt;&amp;lt;ngork account 토큰 발급&amp;gt;&lt;/em&gt;&lt;/p&gt;
&lt;/center&gt;
&lt;div class="highlight"&gt;&lt;pre tabindex="0" class="chroma"&gt;&lt;code class="language-python" data-lang="python"&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="kn"&gt;from&lt;/span&gt; &lt;span class="nn"&gt;getpass&lt;/span&gt; &lt;span class="kn"&gt;import&lt;/span&gt; &lt;span class="n"&gt;getpass&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="c1"&gt;# Don&amp;#39;t forget create your account of ngrok and get token from https://dashboard.ngrok.com/auth/your-authtoken&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="n"&gt;authtoken&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="n"&gt;getpass&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="s2"&gt;&amp;#34;Input your Auth token&amp;#34;&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;ul&gt;
&lt;li&gt;발급받은 토큰을 복사하여 아래의 코드 실행 시 생성된 입력 창에 입력&lt;/li&gt;
&lt;/ul&gt;
&lt;div class="highlight"&gt;&lt;pre tabindex="0" class="chroma"&gt;&lt;code class="language-bash" data-lang="bash"&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;! wget -q -c -nc https://bin.equinox.io/c/4VmDzA7iaHb/ngrok-stable-linux-amd64.zip
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;! unzip -qq -n ngrok-stable-linux-amd64.zip
&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;ul&gt;
&lt;li&gt;&lt;code&gt;wget&lt;/code&gt;과 &lt;code&gt;unzip&lt;/code&gt; 명령을 통해 &lt;code&gt;ngrok&lt;/code&gt;을 다운로드하고 압축을 해제하여 코랩 환경에서 IP 터널링을 가능케 함&lt;/li&gt;
&lt;/ul&gt;
&lt;h2 id="3-ngrok을-통한-rstudio-server-가동"&gt;3. ngrok을 통한 Rstudio server 가동&lt;/h2&gt;
&lt;p&gt;  마지막으로 앞서 설정한 &lt;code&gt;ngork&lt;/code&gt; 토큰을 통해 코랩 로컬에서 실행되어 있는 &lt;code&gt;rstudio-server&lt;/code&gt; 웹 서버를 공용 IP 주소로 터널링하여 접근을 진행한다. 아래의 코드를 실행시키면 나오는 주소가 바로 코랩으로 실행시킨 &lt;code&gt;rstudio-server&lt;/code&gt;의 웹 주소이므로 출력하여 나오는 주소로 접속.&lt;/p&gt;
&lt;div class="highlight"&gt;&lt;pre tabindex="0" class="chroma"&gt;&lt;code class="language-python" data-lang="python"&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="c1"&gt;# Run ngrok&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="n"&gt;get_ipython&lt;/span&gt;&lt;span class="p"&gt;()&lt;/span&gt;&lt;span class="o"&gt;.&lt;/span&gt;&lt;span class="n"&gt;system_raw&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="s1"&gt;&amp;#39;./ngrok authtoken $authtoken &amp;amp;&amp;amp; ./ngrok http 8787 &amp;amp;&amp;#39;&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="err"&gt;!&lt;/span&gt; &lt;span class="n"&gt;sleep&lt;/span&gt; &lt;span class="mi"&gt;3&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="c1"&gt;# Get the address for Rstudio-server&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="kn"&gt;import&lt;/span&gt; &lt;span class="nn"&gt;requests&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="kn"&gt;from&lt;/span&gt; &lt;span class="nn"&gt;re&lt;/span&gt; &lt;span class="kn"&gt;import&lt;/span&gt; &lt;span class="n"&gt;sub&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="n"&gt;r&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="n"&gt;requests&lt;/span&gt;&lt;span class="o"&gt;.&lt;/span&gt;&lt;span class="n"&gt;get&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="s1"&gt;&amp;#39;http://localhost:4040/api/tunnels&amp;#39;&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="n"&gt;str_ssh&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="n"&gt;r&lt;/span&gt;&lt;span class="o"&gt;.&lt;/span&gt;&lt;span class="n"&gt;json&lt;/span&gt;&lt;span class="p"&gt;()[&lt;/span&gt;&lt;span class="s1"&gt;&amp;#39;tunnels&amp;#39;&lt;/span&gt;&lt;span class="p"&gt;][&lt;/span&gt;&lt;span class="mi"&gt;0&lt;/span&gt;&lt;span class="p"&gt;][&lt;/span&gt;&lt;span class="s1"&gt;&amp;#39;public_url&amp;#39;&lt;/span&gt;&lt;span class="p"&gt;]&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="nb"&gt;print&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;str_ssh&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;div class="highlight"&gt;&lt;pre tabindex="0" class="chroma"&gt;&lt;code class="language-fallback" data-lang="fallback"&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;#&amp;gt; https://af9e-105-199-235-17.ngrok-free.app # 출력 예시
&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;p&gt;&lt;img src="images/ngork_visit.png" alt="ngrok을 통해 RStudio Server에 접속하는 화면" width="100%" /&gt;&lt;img src="images/rstudio-login.png" alt="RStudio Server 로그인 화면" width="100%" /&gt;&lt;/p&gt;
&lt;img src="images/rstudio-main.png" alt="" width="100%"/&gt;
&lt;center&gt;
&lt;p&gt;&lt;em&gt;&amp;lt;ngork tunneling 및 Rstudio-server login, main 페이지&amp;gt;&lt;/em&gt;&lt;/p&gt;
&lt;/center&gt;
&lt;p&gt;  출력으로 나온 &lt;code&gt;ngork&lt;/code&gt; 터널링 페이지에서 &lt;strong&gt;Visit Site&lt;/strong&gt;를 클릭하면 우리가 설정한 &lt;code&gt;rstudio-server&lt;/code&gt;의 로그인 화면을 볼 수 있고, 이 후에 앞서 설정한 로그인 입력정보&lt;code&gt;(ID : rstudio, PW : 1234)&lt;/code&gt;를 입력하게 되면 비로소 코랩에서 코랩의 리소스를 통한 &lt;code&gt;Rstudio&lt;/code&gt; 사용 가능하다.&lt;/p&gt;
&lt;hr&gt;
&lt;h1 id="references"&gt;References&lt;/h1&gt;
&lt;ul&gt;
&lt;li&gt;
&lt;p&gt;
(Github repository)&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;
(.ipynb)&lt;/p&gt;
&lt;/li&gt;
&lt;/ul&gt;</description></item><item><title>[R] 더욱 빠른 연산을 위한 병렬처리(With future Package)</title><link>https://www.jdwblog.com/post/parallel-with-future/</link><pubDate>Mon, 22 Feb 2021 00:00:00 +0000</pubDate><guid>https://www.jdwblog.com/post/parallel-with-future/</guid><description>&lt;img src="images/main.jpg" alt="" width="70%"/&gt;
&lt;center&gt;
&lt;p&gt;&lt;em&gt;사진출처 :&lt;/em&gt; &lt;a href="https://pixabay.com/users/mohamed_hassan-5229782/?utm_source=link-attribution&amp;amp;utm_medium=referral&amp;amp;utm_campaign=image&amp;amp;utm_content=3042638"&gt;mohamed Hassan&lt;/a&gt; from &lt;a href="https://pixabay.com/?utm_source=link-attribution&amp;amp;utm_medium=referral&amp;amp;utm_campaign=image&amp;amp;utm_content=3042638"&gt;Pixabay&lt;/a&gt;&lt;/p&gt;
&lt;/center&gt;
&lt;br&gt;
&lt;p&gt; 계산할게 많은 코드를 돌릴때면 당연하게도 많은 시간을 소모하게 됩니다. 통계모델구축과 같이 연산량이 많은 작업을 돌리는 경우에 종종 이러한 상황을 맞닥들이곤 하는데요. 코드가 돌아가는 시간동안은 어쩔수 없이 하고있는 업무를 잠시 중단하거나 다른 일을 하는 수 밖에 없는 상황입니다. 이와 같은 시간이 아깝다고 생각이 드는건 지극히 정상적인 생각일 것입니다. 코드의 결과물이 빨리 나올수록 하고 있는 일을 더 빨리 끝내거나 혹은 그 시간에 더 많은 일을 할 수 있는데 말이죠. 오늘은 이러한 코드의 연산에 필요한 시간을 어쩌면 획기적으로 줄여줄수 있는 &lt;strong&gt;&lt;code&gt;future&lt;/code&gt;&lt;/strong&gt; 패키지에 대해 알아보겠습니다.&lt;/p&gt;
&lt;h1 id="cpu"&gt;CPU&lt;/h1&gt;
&lt;p&gt; 설명하기에 앞서 여려분은 R을 어떠한 환경에서 사용하고 계신가요? 노트북 또는 데스크탑, 클라우드 환경 등 다양한 환경에서 R을 사용하고 계실겁니다. 저는 윈도우가 탑제된 노트북에서 R을 사용하고 있는데요. 제가 사용하고있는 노트북의 CPU는
로 헥사코어(6개의 코어)와 인텔의 하이퍼쓰레딩 기술이 적용된 제품을 사용하고 있습니다. CPU는 들어봤어도 헥사코어니 하이퍼쓰레딩이니하는 용어에 대해서 처음 들어보시는 분들도 계실겁니다. 저와 같은 &lt;em&gt;컴알못&lt;/em&gt;(컴퓨터를 잘 알지 못하는)분들에게는 이런 생소한 용어 하나하나가 어려움으로 다가올텐데요. 이 후에 후술할 &lt;strong&gt;병렬처리&lt;/strong&gt;를 이해하기 위해서는 이러한 부품들의 역할과 기능을 이해하고 있어야 하기 때문에 이런 용어를 설명해야 하는점 미리 양해를 구하겠습니다. 혹시나 이와같은 개념을 이미 알고 계신다면 넘어가셔도 상관 없습니다.&lt;/p&gt;
&lt;h2 id="코어--쓰레드"&gt;코어 &amp;amp; 쓰레드&lt;/h2&gt;
&lt;p&gt; 용어에 대한 설명을 진행하겠지만 본 포스트는 컴퓨터 용어에 대한 것이 아니기 때문에 최대한 간단하게 해보도록 하겠습니다. 먼저 컴퓨터의 두뇌라 할수있는 CPU에는 코어라는 것이 존재하는데 코어는 CPU에서 실질적으로 연산을 담당하는 장치입니다. 과거에는 CPU당 1개의 코어가 들어갔었으나 기술이 발전하면서 현재 출시되는 CPU에는 많게는 코어가 32개까지 들어가는 &lt;em&gt;멀티코어&lt;/em&gt;로 구성되어 있습니다.&lt;/p&gt;
&lt;p&gt; 이러한 코어에는 쓰레드라는 개념이 존재하는데, 쓰레드는 코어에 할당된 작업 공간입니다. 즉, CPU 내부에서 일을 처리하는 최소의 단위이며 코어가 일을 하는 노동자라고 하면 쓰레드는 노동자가 동시에 할 수 있는 업무의 갯수라고 이해하면 될 것 같습니다.&lt;/p&gt;
&lt;img src="images/cpu_core.png" alt="" width="65%"/&gt;
&lt;center&gt;
&lt;p&gt;&lt;em&gt;CPU 내부 코어의 구성&lt;/em&gt;&lt;/p&gt;
&lt;/center&gt;
&lt;br&gt;
&lt;p&gt; 예시로 든 이미지에 있는 CPU는 4개의 코어가 들어간 &lt;em&gt;쿼드코어&lt;/em&gt; CPU로서 당연한 말이지만 2개의 코어를 지닌 &lt;em&gt;듀얼코어&lt;/em&gt;나 &lt;em&gt;싱글코어&lt;/em&gt;의 CPU보다 높은 성능을 낼 것입니다. 한편 인텔에는 &lt;em&gt;하이퍼쓰레딩&lt;/em&gt;이라는 기술이 존재하는데 일반적으로 CPU의 코어는 코어당 하나의 쓰래드를 배분받아 일을 하게 되지만 해당 기술은 하나의 코어가 두 개의 쓰레드를 할당받아 마치 2개의 코어처럼 작동을 하는 것을 의미합니다. 즉, 헥사코어에 하이퍼쓰레드 기술을 지니고 있는 저의 노트북같은 경우는 동시에 연산처리를 할 수 있는 실질적인 코어가 총 12개가 있는 것이죠.&lt;/p&gt;
&lt;img src="images/cpuz.png" alt="" width="50%"/&gt;
&lt;center&gt;
&lt;p&gt;&lt;em&gt;&amp;ldquo;CPU-Z&amp;rdquo; 프로그램으로 알아본 CPU 정보 및 코어 &amp;amp; 쓰레드 갯수&lt;/em&gt;&lt;/p&gt;
&lt;/center&gt;
&lt;br&gt;
&lt;h1 id="병렬처리와-비동기-프로그래밍"&gt;병렬처리와 비동기 프로그래밍&lt;/h1&gt;
&lt;p&gt; 한가지 상황을 상상해보죠. 오늘 저녁은 직접 요리를 해서 먹기로 마음 먹었습니다. 오늘은 집에서 갈비찜에 시금치 무침, 잡채, 그리고 김치볶음밥을 하기로 정했죠. 요리를 위한 재료구입과 다듬기를 마친 상황이고, 이제 한참 갈비찜을 만들고 있었습니다. 그런데 생각보다 갈비찜을 만드는데 시간이 많이 소요가 됩니다. 양념장에 재운 갈비를 끓여 익히기만 하면 되는데 그 시간이 한시간정도 걸린다고 합니다. 이럴경우 보통 어떻게 해야 할까요? 당연하게도 갈비를 익히는 시간동안 다른 잡채나 시금치 무침을 하면 됩니다.&lt;/p&gt;
&lt;p&gt; 그러던 와중에 집에서 요리한다는 소식을 접한 친구가 갑작스럽게 우리집에 방문한다고 합니다. 잘됐습니다. 공짜로 얻어먹으려는 친구를 부려서 같이 요리 하면 좋겠네요. 아마도 시간이 훨씬 단축될 것입니다. 원래라면 두 시간 걸릴 요리가 친구가 도와줌으로 인해서 한 시간 정도로 단축 될 것 같네요.&lt;/p&gt;
&lt;p&gt; 혼자 처리할 일을 친구와 같이 함으로서 시간이 단축되는 것 처럼 단일 프로세스에서 처리할 일을 여러 프로세스와 함께 처리하는 방식을 병렬처리라고 합니다. 그리고 일반적인 R 코드는 순차적으로 처리를 하지 동시에 처리하는것은 불가능합니다. 이를 위의 상황에 비유하자면 갈비찜과 잡채를 만들고 있는 상황에서 갈비찜이 완성되기 전까지는 잡채나 시금치 무침같은 다른 요리를 만드는 것에는 일절 손도 안대는 상황이라 할 수 있습니다. 이처럼 작업의 순서가 고정되어 있지 않고 주어진 일을 여건에 맞게 유기적으로 처리하는 방식을 비동기(Async) 방식이라 하며, 반대로 주어진 일을 순차적으로 처리하는 방식을 동기식(Sync)이라 합니다.&lt;/p&gt;
&lt;h1 id="future-package"&gt;future package&lt;/h1&gt;
&lt;p&gt; 동기식으로 처리되던 기존의 R 코드를 &lt;strong&gt;&lt;code&gt;future&lt;/code&gt;&lt;/strong&gt; 패키지를 사용한다면 효율적이고 그리고 손쉽게 병렬 처리 및 비동기 연산을 할 수 있습니다.&lt;/p&gt;
&lt;h2 id="설치-및-기본-설정"&gt;설치 및 기본 설정&lt;/h2&gt;
&lt;p&gt; &lt;strong&gt;&lt;code&gt;future&lt;/code&gt;&lt;/strong&gt; 패키지는 cran에 정식으로 등록된 패키지이기 때문에 &lt;code&gt;install.packages()&lt;/code&gt;함수를 사용하여 설치가 가능합니다.&lt;/p&gt;
&lt;div class="highlight"&gt;&lt;pre tabindex="0" class="chroma"&gt;&lt;code class="language-r" data-lang="r"&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="c1"&gt;# install.packages(future)&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="nf"&gt;library&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;future&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;p&gt; 패키지를 설치하였다면 비동기 연산을 위한 설정을 별도로 진행해 줘야 합니다. &lt;strong&gt;&lt;code&gt;future&lt;/code&gt;&lt;/strong&gt; 패키지가 제공하는 &lt;code&gt;plan()&lt;/code&gt; 함수는 코드 연산 방식을 동기식으로 할지 비동기식으로 할지 설정하도록 하는 함수입니다. 여기에 인자로 &lt;code&gt;multisession&lt;/code&gt; 을 지정하면 &lt;strong&gt;&lt;code&gt;future&lt;/code&gt;&lt;/strong&gt; 패키지가 백그라운드에서 자동적으로 별도의 R 세션을 생성하고, 이후 병렬연산이 필요한 경우에 사용할 수 있습니다. (MAC 이용자의 경우 &lt;code&gt;plan(multicore)&lt;/code&gt;로 설정하시면 됩니다.)&lt;/p&gt;
&lt;div class="highlight"&gt;&lt;pre tabindex="0" class="chroma"&gt;&lt;code class="language-r" data-lang="r"&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="nf"&gt;plan&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;multisession&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;p&gt; &lt;code&gt;plan()&lt;/code&gt; 함수를 실행하면 현재 환경에서 사용 가능한 전체 CPU의 코어를 자동으로 탐지하여 이 갯수만큼의 R 세션을 생성하게 됩니다. 저의 노트북을 예시로 들면 12개의 세션을 백그라운드에서 생성하게 되죠. 만약 전체 CPU의 코어 사용이 부담스럽다면 &lt;code&gt;plan()&lt;/code&gt; 함수가 제공하는 &lt;code&gt;workers&lt;/code&gt; 옵션을 설정하면 원하는 만큼의 코어를 사용할 수 있습니다. 여기서는 8개의 코어만 사용해 보도록 하겠습니다.&lt;/p&gt;
&lt;div class="highlight"&gt;&lt;pre tabindex="0" class="chroma"&gt;&lt;code class="language-r" data-lang="r"&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="c1"&gt;# 기본 설정 코어 갯수 &amp;amp; 실행 가능한 최대 CPU 코어&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="nf"&gt;availableCores&lt;/span&gt;&lt;span class="p"&gt;()&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;div class="highlight"&gt;&lt;pre tabindex="0" class="chroma"&gt;&lt;code class="language-fallback" data-lang="fallback"&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;#&amp;gt; system
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;#&amp;gt; 12
&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;div class="highlight"&gt;&lt;pre tabindex="0" class="chroma"&gt;&lt;code class="language-r" data-lang="r"&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="c1"&gt;# 사용 코어 갯수 지정&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="nf"&gt;plan&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;multisession&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="n"&gt;workers&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="m"&gt;8&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;p&gt; 이렇게 설정되어 만들어진 세션들은 (윈도우)작업관리자를 통해 확인할 수 있습니다. &lt;code&gt;plan()&lt;/code&gt;함수를 통해 &amp;lsquo;R for Windows front-end&amp;rsquo; 세션들이 새로이 생성된 것을 볼 수 있습니다.&lt;/p&gt;
&lt;img src="images/future-newsession.png" alt="" width="100%"/&gt;
&lt;center&gt;
&lt;p&gt;&lt;em&gt;기본 세션(좌), &lt;code&gt;plan(multisession)&lt;/code&gt;으로 생성된 백그라운드 세션(우)&lt;/em&gt;&lt;/p&gt;
&lt;/center&gt;
&lt;br&gt;
&lt;h2 id="기본-용법"&gt;기본 용법&lt;/h2&gt;
&lt;p&gt; &lt;strong&gt;&lt;code&gt;future&lt;/code&gt;&lt;/strong&gt; 패키지를 사용하는 방법에는 두가지 방식이 있습니다. 하나는 &lt;code&gt;future()&lt;/code&gt; 함수를 명시적으로 사용하는 것이고 다른 하나는 패키지에서 제공하는 &lt;code&gt;%&amp;lt;-%&lt;/code&gt; 형태의 특수한 연산자를 사용하여 퓨쳐를 암시적으로 지정하는 것입니다.&lt;br&gt;
 비교를 위해 임의의 함수 하나를 생성해서 사용해보도록 하겠습니다. &lt;code&gt;testFunc1()&lt;/code&gt; 함수는 단순히 &amp;lsquo;hi&amp;rsquo;라는 단어를 콘솔창에 출력한 뒤 3.14를 반환하는 함수입니다.&lt;/p&gt;
&lt;div class="highlight"&gt;&lt;pre tabindex="0" class="chroma"&gt;&lt;code class="language-r" data-lang="r"&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="n"&gt;testFunc1&lt;/span&gt; &lt;span class="o"&gt;&amp;lt;-&lt;/span&gt; &lt;span class="kr"&gt;function&lt;/span&gt;&lt;span class="p"&gt;(){&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; &lt;span class="nf"&gt;cat&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="s"&gt;&amp;#39;hi&amp;#39;&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; &lt;span class="m"&gt;3.14&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="p"&gt;}&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;p&gt; 그런다음 &lt;strong&gt;&lt;code&gt;future&lt;/code&gt;&lt;/strong&gt; 의 명시적 용법과 암시적 용법을 각각 사용하여 &lt;code&gt;testFunc1()&lt;/code&gt; 함수를 출력해보도록 하겠습니다. 두 방식 모두 이전에 설정한 &lt;code&gt;plan(multisession)&lt;/code&gt; 함수를 통해 비동기 방식을 설정한 상태이며, 이를 통해 연산이 현재의 R studio 세션에서 진행되는 것이 아닌 백그라운드 세션에서 이루어집니다.&lt;/p&gt;
&lt;div class="highlight"&gt;&lt;pre tabindex="0" class="chroma"&gt;&lt;code class="language-r" data-lang="r"&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="c1"&gt;# 명시적 용법 &lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="n"&gt;f1&lt;/span&gt; &lt;span class="o"&gt;&amp;lt;-&lt;/span&gt; &lt;span class="nf"&gt;future&lt;/span&gt;&lt;span class="p"&gt;({&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; &lt;span class="nf"&gt;testFunc1&lt;/span&gt;&lt;span class="p"&gt;()&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="p"&gt;})&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="c1"&gt;# 암시적 용법 &lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="n"&gt;f2&lt;/span&gt; &lt;span class="o"&gt;%&amp;lt;-%&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; &lt;span class="nf"&gt;testFunc1&lt;/span&gt;&lt;span class="p"&gt;()&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="p"&gt;}&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;div class="highlight"&gt;&lt;pre tabindex="0" class="chroma"&gt;&lt;code class="language-r" data-lang="r"&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="n"&gt;f1&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;div class="highlight"&gt;&lt;pre tabindex="0" class="chroma"&gt;&lt;code class="language-gdscript3" data-lang="gdscript3"&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="c1"&gt;#&amp;gt; MultisessionFuture:&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="c1"&gt;#&amp;gt; Label: &amp;#39;&amp;lt;none&amp;gt;&amp;#39;&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="c1"&gt;#&amp;gt; Expression:&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="c1"&gt;#&amp;gt; {&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="c1"&gt;#&amp;gt; testFunc1()&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="c1"&gt;#&amp;gt; }&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="c1"&gt;#&amp;gt; Lazy evaluation: FALSE&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="c1"&gt;#&amp;gt; Asynchronous evaluation: TRUE&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="c1"&gt;#&amp;gt; Local evaluation: TRUE&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="c1"&gt;#&amp;gt; Environment: R_GlobalEnv&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="c1"&gt;#&amp;gt; Capture standard output: TRUE&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="c1"&gt;#&amp;gt; Capture condition classes: &amp;#39;condition&amp;#39;&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="c1"&gt;#&amp;gt; Globals: 1 objects totaling 5.21 KiB (function &amp;#39;testFunc1&amp;#39; of 5.21 KiB)&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="c1"&gt;#&amp;gt; Packages: &amp;lt;none&amp;gt;&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="c1"&gt;#&amp;gt; L&amp;#39;Ecuyer-CMRG RNG seed: &amp;lt;none&amp;gt; (seed = FALSE)&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="c1"&gt;#&amp;gt; Resolved: TRUE&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="c1"&gt;#&amp;gt; Value: &amp;lt;not collected&amp;gt;&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="c1"&gt;#&amp;gt; Conditions captured: &amp;lt;none&amp;gt;&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="c1"&gt;#&amp;gt; Early signaling: FALSE&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="c1"&gt;#&amp;gt; Owner process: 81d55a71-a4c6-da64-cea2-9ca8570374dc&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="c1"&gt;#&amp;gt; Class: &amp;#39;MultisessionFuture&amp;#39;, &amp;#39;ClusterFuture&amp;#39;, &amp;#39;MultiprocessFuture&amp;#39;, &amp;#39;Future&amp;#39;, &amp;#39;environment&amp;#39;&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;div class="highlight"&gt;&lt;pre tabindex="0" class="chroma"&gt;&lt;code class="language-r" data-lang="r"&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="n"&gt;f2&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;div class="highlight"&gt;&lt;pre tabindex="0" class="chroma"&gt;&lt;code class="language-fallback" data-lang="fallback"&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;#&amp;gt; hi
&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;div class="highlight"&gt;&lt;pre tabindex="0" class="chroma"&gt;&lt;code class="language-fallback" data-lang="fallback"&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;#&amp;gt; [1] 3.14
&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;p&gt; 암시적 용법을 사용한 &lt;code&gt;f2&lt;/code&gt; 의 경우 &lt;code&gt;testFunc1()&lt;/code&gt; 함수의 output을 정상적으로 출력하였지만 명시적 용법을 사용한 &lt;code&gt;f1&lt;/code&gt; 객체의 경우는 다소 알기 어려운 메세지만을 출력하였습니다. &lt;strong&gt;&lt;code&gt;future&lt;/code&gt;&lt;/strong&gt; 패키지에서 명시적 용법과 암시적 용법은 기본적으로 같은 기능을 수행하지만 명시적 용법을 사용하는 경우 값을 반환받기 위해서는 &lt;code&gt;value()&lt;/code&gt; 함수를 통해 반환을 받습니다.&lt;/p&gt;
&lt;div class="highlight"&gt;&lt;pre tabindex="0" class="chroma"&gt;&lt;code class="language-r" data-lang="r"&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="nf"&gt;value&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;f1&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;div class="highlight"&gt;&lt;pre tabindex="0" class="chroma"&gt;&lt;code class="language-fallback" data-lang="fallback"&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;#&amp;gt; hi
&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;div class="highlight"&gt;&lt;pre tabindex="0" class="chroma"&gt;&lt;code class="language-fallback" data-lang="fallback"&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;#&amp;gt; [1] 3.14
&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;p&gt; &lt;code&gt;value()&lt;/code&gt; 함수를 사용하니 &lt;code&gt;f1&lt;/code&gt; 객체 역시 &lt;code&gt;f2&lt;/code&gt; 와 동일한 값을 반환합니다. 이처럼 명시적 용법을 사용한 퓨쳐에서는 값을 반환받기 위해 &lt;code&gt;value()&lt;/code&gt; 함수를 사용해야 하며, 간결하게 사용하고 싶은 경우에는 암시적 용법인 &lt;code&gt;%&amp;lt;-%&lt;/code&gt; 연산자를 사용하면 됩니다.&lt;/p&gt;
&lt;h2 id="활용"&gt;활용&lt;/h2&gt;
&lt;p&gt;  지금까지 &lt;strong&gt;&lt;code&gt;future&lt;/code&gt;&lt;/strong&gt; 패키지의 설치와 기본적인 사용법에 대해서 알아보았습니다. 그렇다면 어떠한 상황 혹은 어떠한 목적을 위하여 이것을 사용해야 할까요? 여러가지 상황이 존재하겠지만 제가 생각하기에 &lt;strong&gt;&lt;code&gt;future&lt;/code&gt;&lt;/strong&gt; 패키지를 알맞게 사용하는 상황은 크게 두 가지 인 것 같습니다.&lt;/p&gt;
&lt;h3 id="1-연산을-다른-세션에-위임할-때"&gt;1) 연산을 다른 세션에 위임할 때&lt;/h3&gt;
&lt;p&gt; 맨 처음 말한것처럼 연산량이 많은 코드를 돌릴 경우 코드가 온전히 돌아갈때 까지 기다려야 하는 상황이 발생합니다. 갈비찜이 완성되기 전까지는 아무런 동작도 하지 않는셈이죠. 이럴때 &lt;strong&gt;&lt;code&gt;future&lt;/code&gt;&lt;/strong&gt; 패키지를 사용하면 현재 작업하고 있는 세션에 방해되지 않게 코드를 돌릴 수가 있습니다.&lt;/p&gt;
&lt;div class="highlight"&gt;&lt;pre tabindex="0" class="chroma"&gt;&lt;code class="language-r" data-lang="r"&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="n"&gt;testFunc2&lt;/span&gt; &lt;span class="o"&gt;&amp;lt;-&lt;/span&gt; &lt;span class="kr"&gt;function&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;x&lt;/span&gt;&lt;span class="p"&gt;){&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; &lt;span class="nf"&gt;Sys.sleep&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;x&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; &lt;span class="kr"&gt;return&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="nf"&gt;print&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="s"&gt;&amp;#39;Done!&amp;#39;&lt;/span&gt;&lt;span class="p"&gt;))&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="p"&gt;}&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;p&gt; 시범을 위해 역시 임의의 함수를 생성하도록 하겠습니다. &lt;code&gt;testFunc2()&lt;/code&gt; 함수는 지정한 &lt;code&gt;x&lt;/code&gt;초 만큼 동작을 멈추었다가 마지막에 &lt;code&gt;print('Done!')&lt;/code&gt;을 수행하는 함수입니다. 즉, &lt;code&gt;x&lt;/code&gt;초간 &lt;em&gt;멈추는 동작을 수행&lt;/em&gt; 한 뒤 &amp;lsquo;Done!&amp;lsquo;이란 글자를 출력하는 함수이죠. 이를 계산이 오래 걸리는 함수라고 가정하고 다른 세션에 위임하여 10초동안 돌려보도록 하겠습니다.&lt;/p&gt;
&lt;div class="highlight"&gt;&lt;pre tabindex="0" class="chroma"&gt;&lt;code class="language-r" data-lang="r"&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="c1"&gt;# 다른 세션에서 연산하도록 위임 &lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="n"&gt;t1&lt;/span&gt; &lt;span class="o"&gt;&amp;lt;-&lt;/span&gt; &lt;span class="nf"&gt;future&lt;/span&gt;&lt;span class="p"&gt;({&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; &lt;span class="nf"&gt;testFunc2&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="m"&gt;10&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="p"&gt;})&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="c1"&gt;# 결과 출력 &lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="nf"&gt;value&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;t1&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;div class="highlight"&gt;&lt;pre tabindex="0" class="chroma"&gt;&lt;code class="language-fallback" data-lang="fallback"&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;#&amp;gt; [1] &amp;#34;Done!&amp;#34;
&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;p&gt; &lt;strong&gt;&lt;code&gt;future&lt;/code&gt;&lt;/strong&gt; 패키지를 통해 연산을 다른 세션에 위임한다는 사실을 알게 되었습니다. 그런데 다른 세션에서 작업이 완료가 되었는지 확인은 어떻게 해야할까요? 현재 세션에서 코드를 돌린다면 코드의 연산이 끝날 시 콘솔창에 즉각 출력이되어 코드의 수행 여부를 즉각 확인할 수 있을 것입니다. 그렇지만 다른 세션에서 돌아간 코드는 연산이 끝나더라도 현재 세션에 아무런 영향을 주지 않기 때문에 이를 확인할 방도가 없습니다.&lt;br&gt;
&lt;br&gt;  이러한 상황을 대비하여 &lt;strong&gt;&lt;code&gt;future&lt;/code&gt;&lt;/strong&gt; 패키지는 &lt;code&gt;resolved()&lt;/code&gt; 함수를 제공하고 있습니다.&lt;/p&gt;
&lt;div class="highlight"&gt;&lt;pre tabindex="0" class="chroma"&gt;&lt;code class="language-r" data-lang="r"&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="c1"&gt;# 다른 세션에 연산 위임 &lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="n"&gt;t2&lt;/span&gt; &lt;span class="o"&gt;&amp;lt;-&lt;/span&gt; &lt;span class="nf"&gt;future&lt;/span&gt;&lt;span class="p"&gt;({&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; &lt;span class="nf"&gt;testFunc2&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="m"&gt;10&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="p"&gt;})&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="c1"&gt;# 연산 확인 &lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="n"&gt;i&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="m"&gt;0&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="kr"&gt;while&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="bp"&gt;T&lt;/span&gt;&lt;span class="p"&gt;){&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; &lt;span class="nf"&gt;cat&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="nf"&gt;paste0&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;i&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="s"&gt;&amp;#39; now running \n&amp;#39;&lt;/span&gt;&lt;span class="p"&gt;))&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; &lt;span class="nf"&gt;Sys.sleep&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="m"&gt;1&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; &lt;span class="n"&gt;i&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="n"&gt;i&lt;/span&gt; &lt;span class="o"&gt;+&lt;/span&gt; &lt;span class="m"&gt;1&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; &lt;span class="kr"&gt;if&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="nf"&gt;resolved&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;t2&lt;/span&gt;&lt;span class="p"&gt;)){&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; &lt;span class="nf"&gt;cat&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="s"&gt;&amp;#39;Calculate done! \n&amp;#39;&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; &lt;span class="kr"&gt;break&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; &lt;span class="p"&gt;}&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="p"&gt;}&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="c1"&gt;# 결과 출력 &lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="nf"&gt;value&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;t1&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;div class="highlight"&gt;&lt;pre tabindex="0" class="chroma"&gt;&lt;code class="language-fallback" data-lang="fallback"&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;#&amp;gt; 0 now running
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;#&amp;gt; 1 now running
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;#&amp;gt; 2 now running
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;#&amp;gt; 3 now running
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;#&amp;gt; 4 now running
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;#&amp;gt; 5 now running
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;#&amp;gt; 6 now running
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;#&amp;gt; 7 now running
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;#&amp;gt; Calculate done!
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;#&amp;gt; [1] &amp;#34;Done!&amp;#34;
&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;p&gt; &lt;code&gt;t2&lt;/code&gt; 객체가 현재 연산중인지를 확인하기 위하여 중간에 &lt;code&gt;while&lt;/code&gt; 문을 추가하였습니다. &lt;code&gt;while&lt;/code&gt; 문의 기능은 1초 간격으로 동작을 멈추었다가 &amp;ldquo;&lt;code&gt;i&lt;/code&gt; now running&amp;quot;을 출력하는 코드인데 중간에 있는 &lt;code&gt;if&lt;/code&gt; 문에 &lt;code&gt;resolved(t2)&lt;/code&gt; 함수가 있는 것을 볼 수 있습니다. &lt;code&gt;resolved()&lt;/code&gt; 함수의 기능은 백그라운드 세션에서 연산중인 퓨쳐가 동작하는지를 확인하기 위한 함수로서 만약 해당 퓨쳐가 연산중에 있으면 &lt;code&gt;FALSE&lt;/code&gt; 를, 연산을 마쳤다면 &lt;code&gt;TRUE&lt;/code&gt; 를 반환하게 됩니다. 따라서 &lt;code&gt;t2&lt;/code&gt; 객체에 지정된 퓨쳐가 백그라운드 세션에서 연산중이면 &amp;ldquo;&lt;code&gt;i&lt;/code&gt; now running&amp;rdquo; 출력과 1초 간격으로 동작을 멈추는 작동을 수행하고, 연산이 끝난경우 &lt;code&gt;if&lt;/code&gt; 문 내부의 &lt;code&gt;break&lt;/code&gt; 를 통해 &lt;code&gt;while&lt;/code&gt; 문이 종료가 되는 것입니다. 이와 같은 방법을 응용한다면 백그라운드에서 실행중인 비동기 연산의 수행완료 여부를 효율적으로 인지할 수 있을 것입니다.&lt;/p&gt;
&lt;h3 id="2-더욱-빠른-연산이-필요로-할-때"&gt;2) 더욱 빠른 연산이 필요로 할 때&lt;/h3&gt;
&lt;h4 id="2-1-파일-읽기-속도-비교"&gt;2-1) 파일 읽기 속도 비교&lt;/h4&gt;
&lt;p&gt; 두 번째 경우는 연산속도를 높이고 싶은 상황에 사용하는 것입니다. &lt;strong&gt;&lt;code&gt;future&lt;/code&gt;&lt;/strong&gt; 패키지가 지원하는 병렬연산을 적극 사용하는 방식인데 속도의 비교를 위해 테스트용 데이터를 생성해 보도록 하겠습니다.&lt;/p&gt;
&lt;div class="highlight"&gt;&lt;pre tabindex="0" class="chroma"&gt;&lt;code class="language-r" data-lang="r"&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="c1"&gt;# 테스트용 csv 저장&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="nf"&gt;library&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;dplyr&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="nf"&gt;data.frame&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; &lt;span class="n"&gt;t1&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="nf"&gt;rnorm&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="m"&gt;10000&lt;/span&gt;&lt;span class="p"&gt;),&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; &lt;span class="n"&gt;t2&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="nf"&gt;rnorm&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="m"&gt;10000&lt;/span&gt;&lt;span class="p"&gt;),&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; &lt;span class="n"&gt;t3&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="nf"&gt;rnorm&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="m"&gt;10000&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="p"&gt;)&lt;/span&gt; &lt;span class="o"&gt;%&amp;gt;%&lt;/span&gt; &lt;span class="nf"&gt;write.csv&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;.,&lt;/span&gt; &lt;span class="s"&gt;&amp;#39;testFile.csv&amp;#39;&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;p&gt;  정규분포를 따르는 난수를 생성하는 &lt;code&gt;rnorm()&lt;/code&gt; 함수를 사용하여 3개의 column과 10000개의 row를 지니고 있는 임의의 데이터프레임을 생성하였고, 이를 csv파일로 저장하였습니다. R 에서 제공하는 다양한 반복 처리 기법들을 사용하여 생성한 csv파일을 각각 500번씩 읽어들이는데 소요된 속도를 &lt;code&gt;system.time()&lt;/code&gt; 함수를 사용하여 비교해보도록 하겠습니다.&lt;/p&gt;
&lt;div class="highlight"&gt;&lt;pre tabindex="0" class="chroma"&gt;&lt;code class="language-r" data-lang="r"&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="c1"&gt;# 테스트 결과 리스트에 저장&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="n"&gt;speed_result&lt;/span&gt; &lt;span class="o"&gt;&amp;lt;-&lt;/span&gt; &lt;span class="nf"&gt;list&lt;/span&gt;&lt;span class="p"&gt;()&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="n"&gt;speed_result&lt;/span&gt; &lt;span class="o"&gt;&amp;lt;-&lt;/span&gt; &lt;span class="nf"&gt;list&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; &lt;span class="c1"&gt;# for문&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; &lt;span class="n"&gt;forLoop&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="nf"&gt;system.time&lt;/span&gt;&lt;span class="p"&gt;({&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; &lt;span class="kr"&gt;for&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;i&lt;/span&gt; &lt;span class="kr"&gt;in&lt;/span&gt; &lt;span class="m"&gt;1&lt;/span&gt;&lt;span class="o"&gt;:&lt;/span&gt;&lt;span class="m"&gt;500&lt;/span&gt;&lt;span class="p"&gt;){&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; &lt;span class="nf"&gt;read.csv&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="s"&gt;&amp;#39;testFile.csv&amp;#39;&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; &lt;span class="p"&gt;}&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; &lt;span class="p"&gt;}),&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; &lt;span class="c1"&gt;# lapply문&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; &lt;span class="n"&gt;lapply&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="nf"&gt;system.time&lt;/span&gt;&lt;span class="p"&gt;({&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; &lt;span class="nf"&gt;lapply&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="m"&gt;1&lt;/span&gt;&lt;span class="o"&gt;:&lt;/span&gt;&lt;span class="m"&gt;500&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="kr"&gt;function&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;x&lt;/span&gt;&lt;span class="p"&gt;){&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; &lt;span class="nf"&gt;read.csv&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="s"&gt;&amp;#39;testFile.csv&amp;#39;&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; &lt;span class="p"&gt;})&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; &lt;span class="p"&gt;}),&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; &lt;span class="c1"&gt;# sapply문&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; &lt;span class="n"&gt;sapply&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="nf"&gt;system.time&lt;/span&gt;&lt;span class="p"&gt;({&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; &lt;span class="nf"&gt;sapply&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="m"&gt;1&lt;/span&gt;&lt;span class="o"&gt;:&lt;/span&gt;&lt;span class="m"&gt;500&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="kr"&gt;function&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;x&lt;/span&gt;&lt;span class="p"&gt;){&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; &lt;span class="nf"&gt;read.csv&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="s"&gt;&amp;#39;testFile.csv&amp;#39;&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; &lt;span class="p"&gt;})&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; &lt;span class="p"&gt;}),&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; &lt;span class="c1"&gt;# purrr::map문&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; &lt;span class="n"&gt;map&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="nf"&gt;system.time&lt;/span&gt;&lt;span class="p"&gt;({&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; &lt;span class="n"&gt;purrr&lt;/span&gt;&lt;span class="o"&gt;::&lt;/span&gt;&lt;span class="nf"&gt;map&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="m"&gt;1&lt;/span&gt;&lt;span class="o"&gt;:&lt;/span&gt;&lt;span class="m"&gt;500&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="kr"&gt;function&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;x&lt;/span&gt;&lt;span class="p"&gt;){&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; &lt;span class="nf"&gt;read.csv&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="s"&gt;&amp;#39;testFile.csv&amp;#39;&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; &lt;span class="p"&gt;})&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; &lt;span class="p"&gt;}),&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; &lt;span class="c1"&gt;# future문&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; &lt;span class="n"&gt;future&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="nf"&gt;system.time&lt;/span&gt;&lt;span class="p"&gt;({&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; &lt;span class="nf"&gt;future&lt;/span&gt;&lt;span class="p"&gt;({&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; &lt;span class="nf"&gt;lapply&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="m"&gt;1&lt;/span&gt;&lt;span class="o"&gt;:&lt;/span&gt;&lt;span class="m"&gt;500&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="kr"&gt;function&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;x&lt;/span&gt;&lt;span class="p"&gt;){&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; &lt;span class="nf"&gt;read.csv&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="s"&gt;&amp;#39;testFile.csv&amp;#39;&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; &lt;span class="p"&gt;})&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; &lt;span class="p"&gt;})&lt;/span&gt; &lt;span class="o"&gt;%&amp;gt;%&lt;/span&gt; &lt;span class="nf"&gt;value&lt;/span&gt;&lt;span class="p"&gt;()&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; &lt;span class="p"&gt;})&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="p"&gt;)&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="n"&gt;speed_result&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;div class="highlight"&gt;&lt;pre tabindex="0" class="chroma"&gt;&lt;code class="language-fallback" data-lang="fallback"&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;#&amp;gt; $forLoop
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;#&amp;gt; 사용자 시스템 elapsed
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;#&amp;gt; 20.42 0.47 20.97
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;#&amp;gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;#&amp;gt; $lapply
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;#&amp;gt; 사용자 시스템 elapsed
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;#&amp;gt; 21.04 0.41 21.52
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;#&amp;gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;#&amp;gt; $sapply
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;#&amp;gt; 사용자 시스템 elapsed
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;#&amp;gt; 21.29 0.34 21.69
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;#&amp;gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;#&amp;gt; $map
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;#&amp;gt; 사용자 시스템 elapsed
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;#&amp;gt; 21.47 0.34 21.86
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;#&amp;gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;#&amp;gt; $future
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;#&amp;gt; 사용자 시스템 elapsed
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;#&amp;gt; 0.08 0.08 20.28
&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;p&gt;  &lt;strong&gt;&lt;code&gt;future&lt;/code&gt;&lt;/strong&gt; 패키지를 사용하였음에도 불구하고 예상한것과 달리 속도 개선이 그리 와닿지 않습니다. 다른 기법들과 속도가 비슷하거나 &lt;code&gt;purrr::map()&lt;/code&gt; 함수와 비교해보면 되려 속도가 느린 것을 볼 수 있습니다. 여기서 한가지 더 짚고 넘어가야 할 점이라면 &lt;strong&gt;&lt;code&gt;future&lt;/code&gt;&lt;/strong&gt; 패키지를 통해 속도개선을 위한다면 다음의 패키지들을 추가적으로 설치하여 사용하는 것을 추천합니다.&lt;/p&gt;
&lt;div class="highlight"&gt;&lt;pre tabindex="0" class="chroma"&gt;&lt;code class="language-r" data-lang="r"&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="nf"&gt;install.packages&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="s"&gt;&amp;#39;future.apply&amp;#39;&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="nf"&gt;install.packages&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="s"&gt;&amp;#39;furrr&amp;#39;&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;p&gt;  &lt;strong&gt;&lt;code&gt;future&lt;/code&gt;&lt;/strong&gt; 패키지의 확장 패키지들인 &lt;strong&gt;&lt;code&gt;future.apply&lt;/code&gt;&lt;/strong&gt; , &lt;strong&gt;&lt;code&gt;furrr&lt;/code&gt;&lt;/strong&gt; 패키지는 병렬 환경에서 각각 &lt;code&gt;apply&lt;/code&gt; 문과 &lt;code&gt;purrr&lt;/code&gt; 패키지의 함수를 대체하여 사용할 수 있는 &lt;code&gt;future.apply::future_apply()&lt;/code&gt; 또는 &lt;code&gt;furrr::future_map()&lt;/code&gt; 등의 함수를 제공하고 있습니다.&lt;/p&gt;
&lt;div class="highlight"&gt;&lt;pre tabindex="0" class="chroma"&gt;&lt;code class="language-r" data-lang="r"&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="c1"&gt;# future_lapply 속도 측정 &lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="nf"&gt;library&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;future.apply&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="nf"&gt;list&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; &lt;span class="n"&gt;future_apply&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="nf"&gt;system.time&lt;/span&gt;&lt;span class="p"&gt;({&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; &lt;span class="nf"&gt;future_lapply&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="m"&gt;1&lt;/span&gt;&lt;span class="o"&gt;:&lt;/span&gt;&lt;span class="m"&gt;500&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="kr"&gt;function&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;x&lt;/span&gt;&lt;span class="p"&gt;){&lt;/span&gt;&lt;span class="nf"&gt;read.csv&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="s"&gt;&amp;#39;testFile.csv&amp;#39;&lt;/span&gt;&lt;span class="p"&gt;)})&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; &lt;span class="p"&gt;})&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="p"&gt;)&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;div class="highlight"&gt;&lt;pre tabindex="0" class="chroma"&gt;&lt;code class="language-fallback" data-lang="fallback"&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;#&amp;gt; $future_apply
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;#&amp;gt; 사용자 시스템 elapsed
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;#&amp;gt; 0.22 0.20 8.53
&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;div class="highlight"&gt;&lt;pre tabindex="0" class="chroma"&gt;&lt;code class="language-r" data-lang="r"&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="c1"&gt;# future_map 속도 측정 &lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="nf"&gt;library&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;furrr&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="nf"&gt;list&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; &lt;span class="n"&gt;future_map&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="nf"&gt;system.time&lt;/span&gt;&lt;span class="p"&gt;({&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; &lt;span class="nf"&gt;future_map&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="m"&gt;1&lt;/span&gt;&lt;span class="o"&gt;:&lt;/span&gt;&lt;span class="m"&gt;500&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="kr"&gt;function&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;x&lt;/span&gt;&lt;span class="p"&gt;){&lt;/span&gt;&lt;span class="nf"&gt;read.csv&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="s"&gt;&amp;#39;testFile.csv&amp;#39;&lt;/span&gt;&lt;span class="p"&gt;)})&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; &lt;span class="p"&gt;})&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="p"&gt;)&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;div class="highlight"&gt;&lt;pre tabindex="0" class="chroma"&gt;&lt;code class="language-fallback" data-lang="fallback"&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;#&amp;gt; $future_map
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;#&amp;gt; 사용자 시스템 elapsed
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;#&amp;gt; 0.28 0.16 7.72
&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;p&gt; &lt;code&gt;future()&lt;/code&gt; 함수의 속도 대비 훨신 빠른 성능을 보인 것을 확인할 수 있습니다.&lt;/p&gt;
&lt;h4 id="2-2-모델링-속도-비교"&gt;2-2) 모델링 속도 비교&lt;/h4&gt;
&lt;p&gt; 이번에는 실제 모델링에서의 연산속도는 어떠할지 측정해 보도록 하겠습니다. 시계열분석 예제 데이터로 많이 활용되는 &lt;code&gt;AirPassengers&lt;/code&gt; 데이터에 난수를 더하여 만든 50개의 시계열 데이터에 각각 ARIMA모형을 구축하고, 각 방법마다 모델링에 걸리는 시간을 측정 및 비교해 보도록 하겠습니다. 이번에도 역시 다른 일반적인 기법들과의 비교를 통해 속도 측정을 진행해 보도록 하죠.&lt;/p&gt;
&lt;div class="highlight"&gt;&lt;pre tabindex="0" class="chroma"&gt;&lt;code class="language-r" data-lang="r"&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="nf"&gt;library&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;forecast&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="c1"&gt;# 속도 측정용 데이터 생성 &lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="n"&gt;test_range&lt;/span&gt; &lt;span class="o"&gt;&amp;lt;-&lt;/span&gt; &lt;span class="m"&gt;1&lt;/span&gt;&lt;span class="o"&gt;:&lt;/span&gt;&lt;span class="m"&gt;50&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="n"&gt;testdata&lt;/span&gt; &lt;span class="o"&gt;&amp;lt;-&lt;/span&gt; &lt;span class="nf"&gt;lapply&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;test_range&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="kr"&gt;function&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;x&lt;/span&gt;&lt;span class="p"&gt;){&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; &lt;span class="n"&gt;AirPassengers&lt;/span&gt; &lt;span class="o"&gt;+&lt;/span&gt; &lt;span class="nf"&gt;sample&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="m"&gt;144&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="p"&gt;})&lt;/span&gt; &lt;span class="o"&gt;%&amp;gt;%&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; &lt;span class="nf"&gt;as.data.frame&lt;/span&gt;&lt;span class="p"&gt;()&lt;/span&gt; &lt;span class="o"&gt;%&amp;gt;%&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; &lt;span class="nf"&gt;rename_with&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="o"&gt;~&lt;/span&gt;&lt;span class="nf"&gt;paste0&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="s"&gt;&amp;#39;air&amp;#39;&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="n"&gt;test_range&lt;/span&gt;&lt;span class="p"&gt;))&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="nf"&gt;glimpse&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;testdata&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;div class="highlight"&gt;&lt;pre tabindex="0" class="chroma"&gt;&lt;code class="language-fallback" data-lang="fallback"&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;#&amp;gt; Rows: 144
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;#&amp;gt; Columns: 50
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;#&amp;gt; $ air1 &amp;lt;dbl&amp;gt; 132, 217, 261, 156, 224, 242, 196, 233, 277, 177, 226, 133, 253,~
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;#&amp;gt; $ air2 &amp;lt;dbl&amp;gt; 235, 182, 168, 159, 203, 142, 191, 157, 146, 206, 185, 137, 131,~
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;#&amp;gt; $ air3 &amp;lt;dbl&amp;gt; 181, 140, 156, 218, 244, 263, 149, 259, 186, 237, 121, 257, 252,~
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;#&amp;gt; $ air4 &amp;lt;dbl&amp;gt; 160, 122, 146, 211, 164, 266, 180, 228, 139, 200, 141, 251, 172,~
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;#&amp;gt; $ air5 &amp;lt;dbl&amp;gt; 123, 241, 219, 204, 211, 277, 189, 211, 244, 123, 146, 194, 203,~
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;#&amp;gt; $ air6 &amp;lt;dbl&amp;gt; 251, 190, 265, 150, 187, 180, 255, 274, 276, 126, 138, 182, 207,~
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;#&amp;gt; $ air7 &amp;lt;dbl&amp;gt; 246, 211, 133, 175, 123, 188, 191, 255, 275, 183, 198, 241, 185,~
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;#&amp;gt; $ air8 &amp;lt;dbl&amp;gt; 199, 152, 135, 204, 245, 171, 171, 222, 188, 246, 144, 120, 175,~
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;#&amp;gt; $ air9 &amp;lt;dbl&amp;gt; 148, 198, 218, 161, 187, 158, 156, 208, 266, 126, 154, 132, 199,~
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;#&amp;gt; $ air10 &amp;lt;dbl&amp;gt; 209, 235, 160, 148, 137, 174, 261, 202, 171, 231, 191, 200, 206,~
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;#&amp;gt; $ air11 &amp;lt;dbl&amp;gt; 153, 148, 255, 221, 241, 276, 156, 170, 229, 247, 138, 217, 237,~
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;#&amp;gt; $ air12 &amp;lt;dbl&amp;gt; 171, 240, 180, 131, 245, 249, 227, 190, 162, 137, 121, 146, 179,~
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;#&amp;gt; $ air13 &amp;lt;dbl&amp;gt; 204, 121, 232, 198, 246, 256, 257, 274, 179, 172, 194, 230, 209,~
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;#&amp;gt; $ air14 &amp;lt;dbl&amp;gt; 180, 189, 271, 172, 185, 236, 258, 163, 144, 145, 170, 221, 162,~
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;#&amp;gt; $ air15 &amp;lt;dbl&amp;gt; 252, 191, 233, 149, 160, 263, 163, 175, 242, 130, 192, 159, 224,~
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;#&amp;gt; $ air16 &amp;lt;dbl&amp;gt; 162, 214, 247, 250, 174, 244, 205, 206, 259, 196, 211, 237, 197,~
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;#&amp;gt; $ air17 &amp;lt;dbl&amp;gt; 119, 246, 137, 142, 241, 246, 191, 174, 157, 171, 158, 179, 140,~
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;#&amp;gt; $ air18 &amp;lt;dbl&amp;gt; 122, 254, 166, 140, 245, 238, 254, 167, 153, 227, 135, 138, 243,~
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;#&amp;gt; $ air19 &amp;lt;dbl&amp;gt; 236, 190, 258, 230, 230, 180, 195, 245, 191, 230, 145, 231, 209,~
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;#&amp;gt; $ air20 &amp;lt;dbl&amp;gt; 136, 223, 246, 156, 169, 227, 285, 244, 178, 177, 159, 134, 175,~
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;#&amp;gt; $ air21 &amp;lt;dbl&amp;gt; 168, 245, 149, 164, 154, 140, 175, 259, 200, 149, 242, 241, 160,~
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;#&amp;gt; $ air22 &amp;lt;dbl&amp;gt; 114, 183, 212, 273, 199, 265, 217, 210, 248, 179, 133, 125, 166,~
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;#&amp;gt; $ air23 &amp;lt;dbl&amp;gt; 175, 253, 218, 146, 149, 155, 237, 166, 175, 253, 230, 159, 248,~
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;#&amp;gt; $ air24 &amp;lt;dbl&amp;gt; 247, 212, 238, 269, 177, 179, 250, 189, 225, 260, 109, 211, 202,~
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;#&amp;gt; $ air25 &amp;lt;dbl&amp;gt; 148, 200, 186, 246, 246, 138, 176, 220, 215, 252, 138, 167, 227,~
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;#&amp;gt; $ air26 &amp;lt;dbl&amp;gt; 125, 223, 215, 164, 231, 190, 151, 225, 199, 244, 129, 158, 162,~
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;#&amp;gt; $ air27 &amp;lt;dbl&amp;gt; 149, 237, 133, 133, 230, 137, 261, 232, 252, 190, 233, 144, 130,~
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;#&amp;gt; $ air28 &amp;lt;dbl&amp;gt; 142, 208, 227, 207, 245, 156, 219, 255, 177, 127, 209, 192, 183,~
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;#&amp;gt; $ air29 &amp;lt;dbl&amp;gt; 177, 221, 141, 156, 188, 207, 279, 186, 210, 141, 221, 223, 231,~
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;#&amp;gt; $ air30 &amp;lt;dbl&amp;gt; 135, 179, 210, 244, 179, 251, 290, 216, 270, 248, 145, 142, 178,~
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;#&amp;gt; $ air31 &amp;lt;dbl&amp;gt; 116, 195, 276, 134, 134, 144, 230, 201, 230, 169, 238, 147, 155,~
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;#&amp;gt; $ air32 &amp;lt;dbl&amp;gt; 232, 171, 267, 239, 144, 275, 179, 149, 186, 244, 156, 245, 143,~
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;#&amp;gt; $ air33 &amp;lt;dbl&amp;gt; 255, 228, 233, 218, 206, 168, 235, 243, 190, 230, 219, 180, 168,~
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;#&amp;gt; $ air34 &amp;lt;dbl&amp;gt; 187, 260, 233, 239, 265, 144, 161, 282, 191, 236, 217, 255, 206,~
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;#&amp;gt; $ air35 &amp;lt;dbl&amp;gt; 211, 137, 136, 186, 137, 204, 153, 161, 236, 212, 132, 246, 199,~
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;#&amp;gt; $ air36 &amp;lt;dbl&amp;gt; 145, 212, 224, 159, 135, 272, 221, 184, 280, 171, 135, 224, 199,~
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;#&amp;gt; $ air37 &amp;lt;dbl&amp;gt; 235, 214, 265, 212, 172, 245, 264, 220, 215, 169, 211, 188, 132,~
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;#&amp;gt; $ air38 &amp;lt;dbl&amp;gt; 229, 125, 182, 239, 224, 236, 273, 219, 144, 137, 141, 141, 129,~
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;#&amp;gt; $ air39 &amp;lt;dbl&amp;gt; 178, 139, 193, 183, 224, 191, 256, 150, 164, 251, 116, 215, 128,~
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;#&amp;gt; $ air40 &amp;lt;dbl&amp;gt; 122, 141, 133, 207, 185, 227, 206, 277, 237, 174, 160, 212, 175,~
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;#&amp;gt; $ air41 &amp;lt;dbl&amp;gt; 244, 203, 207, 223, 219, 218, 244, 170, 197, 189, 140, 141, 248,~
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;#&amp;gt; $ air42 &amp;lt;dbl&amp;gt; 202, 120, 223, 251, 257, 278, 258, 289, 183, 205, 176, 119, 132,~
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;#&amp;gt; $ air43 &amp;lt;dbl&amp;gt; 190, 152, 233, 252, 129, 242, 264, 149, 250, 218, 129, 140, 158,~
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;#&amp;gt; $ air44 &amp;lt;dbl&amp;gt; 156, 230, 198, 268, 221, 255, 215, 232, 235, 123, 152, 260, 198,~
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;#&amp;gt; $ air45 &amp;lt;dbl&amp;gt; 253, 194, 138, 209, 251, 199, 180, 229, 180, 171, 169, 195, 197,~
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;#&amp;gt; $ air46 &amp;lt;dbl&amp;gt; 125, 253, 178, 256, 147, 172, 217, 213, 226, 127, 113, 206, 139,~
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;#&amp;gt; $ air47 &amp;lt;dbl&amp;gt; 250, 165, 165, 163, 137, 249, 219, 281, 177, 193, 198, 138, 188,~
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;#&amp;gt; $ air48 &amp;lt;dbl&amp;gt; 241, 261, 220, 252, 148, 255, 157, 183, 274, 234, 225, 172, 184,~
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;#&amp;gt; $ air49 &amp;lt;dbl&amp;gt; 188, 128, 184, 176, 135, 226, 225, 266, 264, 167, 241, 142, 254,~
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;#&amp;gt; $ air50 &amp;lt;dbl&amp;gt; 115, 164, 151, 199, 241, 204, 273, 209, 184, 181, 155, 186, 152,~
&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;div class="highlight"&gt;&lt;pre tabindex="0" class="chroma"&gt;&lt;code class="language-r" data-lang="r"&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="c1"&gt;# 시계열 데이터 변환 &lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="n"&gt;testdata&lt;/span&gt; &lt;span class="o"&gt;&amp;lt;-&lt;/span&gt; &lt;span class="n"&gt;testdata&lt;/span&gt; &lt;span class="o"&gt;%&amp;gt;%&lt;/span&gt; &lt;span class="nf"&gt;ts&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;frequency&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="m"&gt;12&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="n"&gt;start&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="m"&gt;1949&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;div class="highlight"&gt;&lt;pre tabindex="0" class="chroma"&gt;&lt;code class="language-r" data-lang="r"&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="c1"&gt;# 모델링 속도 비교 &lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="n"&gt;modeling_speed_test&lt;/span&gt; &lt;span class="o"&gt;&amp;lt;-&lt;/span&gt; &lt;span class="nf"&gt;list&lt;/span&gt;&lt;span class="p"&gt;()&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="n"&gt;modeling_speed_test&lt;/span&gt; &lt;span class="o"&gt;&amp;lt;-&lt;/span&gt; &lt;span class="nf"&gt;list&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; &lt;span class="c1"&gt;# For문&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; &lt;span class="n"&gt;forLoop&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="nf"&gt;system.time&lt;/span&gt;&lt;span class="p"&gt;({&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; &lt;span class="kr"&gt;for&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;i&lt;/span&gt; &lt;span class="kr"&gt;in&lt;/span&gt; &lt;span class="nf"&gt;seq&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="m"&gt;1&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="nf"&gt;ncol&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;testdata&lt;/span&gt;&lt;span class="p"&gt;))){&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; &lt;span class="n"&gt;testdata[&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="n"&gt;i]&lt;/span&gt; &lt;span class="o"&gt;%&amp;gt;%&lt;/span&gt; &lt;span class="nf"&gt;auto.arima&lt;/span&gt;&lt;span class="p"&gt;()&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; &lt;span class="p"&gt;}&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; &lt;span class="p"&gt;}),&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; &lt;span class="c1"&gt;# lapply문&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; &lt;span class="n"&gt;lapply&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="nf"&gt;system.time&lt;/span&gt;&lt;span class="p"&gt;({&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; &lt;span class="n"&gt;testdata&lt;/span&gt; &lt;span class="o"&gt;%&amp;gt;%&lt;/span&gt; &lt;span class="nf"&gt;lapply&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;auto.arima&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; &lt;span class="p"&gt;}),&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; &lt;span class="c1"&gt;# sapply문&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; &lt;span class="n"&gt;sapply&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="nf"&gt;system.time&lt;/span&gt;&lt;span class="p"&gt;({&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; &lt;span class="n"&gt;testdata&lt;/span&gt; &lt;span class="o"&gt;%&amp;gt;%&lt;/span&gt; &lt;span class="nf"&gt;sapply&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;auto.arima&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; &lt;span class="p"&gt;}),&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; &lt;span class="c1"&gt;# `future` For문&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; &lt;span class="n"&gt;future_forLoop&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="nf"&gt;system.time&lt;/span&gt;&lt;span class="p"&gt;({&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; &lt;span class="kr"&gt;for&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;i&lt;/span&gt; &lt;span class="kr"&gt;in&lt;/span&gt; &lt;span class="nf"&gt;seq&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="m"&gt;1&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="nf"&gt;ncol&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;testdata&lt;/span&gt;&lt;span class="p"&gt;))){&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; &lt;span class="nf"&gt;future&lt;/span&gt;&lt;span class="p"&gt;({&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; &lt;span class="n"&gt;testdata[&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="n"&gt;i]&lt;/span&gt; &lt;span class="o"&gt;%&amp;gt;%&lt;/span&gt; &lt;span class="nf"&gt;auto.arima&lt;/span&gt;&lt;span class="p"&gt;()&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; &lt;span class="p"&gt;})&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; &lt;span class="p"&gt;}&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; &lt;span class="p"&gt;}),&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; &lt;span class="c1"&gt;# future_lapply문&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; &lt;span class="n"&gt;future_lapply&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="nf"&gt;system.time&lt;/span&gt;&lt;span class="p"&gt;({&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; &lt;span class="n"&gt;testdata&lt;/span&gt; &lt;span class="o"&gt;%&amp;gt;%&lt;/span&gt; &lt;span class="nf"&gt;future_lapply&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;auto.arima&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; &lt;span class="p"&gt;}),&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; &lt;span class="c1"&gt;# future_map문&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; &lt;span class="n"&gt;future_map&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="nf"&gt;system.time&lt;/span&gt;&lt;span class="p"&gt;({&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; &lt;span class="n"&gt;testdata&lt;/span&gt; &lt;span class="o"&gt;%&amp;gt;%&lt;/span&gt; &lt;span class="nf"&gt;future_map&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;auto.arima&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; &lt;span class="p"&gt;}),&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; &lt;span class="c1"&gt;#apply문 &lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; &lt;span class="n"&gt;apply&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="nf"&gt;system.time&lt;/span&gt;&lt;span class="p"&gt;({&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; &lt;span class="n"&gt;testdata&lt;/span&gt; &lt;span class="o"&gt;%&amp;gt;%&lt;/span&gt; &lt;span class="nf"&gt;apply&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="m"&gt;2&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="n"&gt;auto.arima&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; &lt;span class="p"&gt;}),&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; &lt;span class="c1"&gt;#future_apply문 &lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; &lt;span class="n"&gt;future_apply&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="nf"&gt;system.time&lt;/span&gt;&lt;span class="p"&gt;({&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; &lt;span class="n"&gt;testdata&lt;/span&gt; &lt;span class="o"&gt;%&amp;gt;%&lt;/span&gt; &lt;span class="nf"&gt;future_apply&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="m"&gt;2&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="n"&gt;auto.arima&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; &lt;span class="p"&gt;})&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="p"&gt;)&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="n"&gt;modeling_speed_test&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;div class="highlight"&gt;&lt;pre tabindex="0" class="chroma"&gt;&lt;code class="language-fallback" data-lang="fallback"&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;#&amp;gt; $forLoop
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;#&amp;gt; 사용자 시스템 elapsed
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;#&amp;gt; 260.25 0.37 261.09
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;#&amp;gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;#&amp;gt; $lapply
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;#&amp;gt; 사용자 시스템 elapsed
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;#&amp;gt; 257.83 0.06 258.26
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;#&amp;gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;#&amp;gt; $sapply
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;#&amp;gt; 사용자 시스템 elapsed
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;#&amp;gt; 268.69 0.13 269.25
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;#&amp;gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;#&amp;gt; $future_forLoop
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;#&amp;gt; 사용자 시스템 elapsed
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;#&amp;gt; 0.98 0.01 96.67
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;#&amp;gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;#&amp;gt; $future_lapply
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;#&amp;gt; 사용자 시스템 elapsed
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;#&amp;gt; 1.41 0.02 113.04
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;#&amp;gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;#&amp;gt; $future_map
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;#&amp;gt; 사용자 시스템 elapsed
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;#&amp;gt; 0.64 0.02 4.21
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;#&amp;gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;#&amp;gt; $apply
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;#&amp;gt; 사용자 시스템 elapsed
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;#&amp;gt; 6.67 0.00 6.72
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;#&amp;gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;#&amp;gt; $future_apply
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;#&amp;gt; 사용자 시스템 elapsed
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;#&amp;gt; 0.47 0.01 2.31
&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;p&gt; 50번에 걸친 ARIMA모델링을 &lt;code&gt;sapply()&lt;/code&gt; 함수가 269.25초 동안 처리한 것에 비해 &lt;code&gt;future_apply()&lt;/code&gt; 함수는 2초 내외의 시간 안에 처리한 것을 확인할 수 있습니다. 이와 같이 &lt;strong&gt;&lt;code&gt;future&lt;/code&gt;&lt;/strong&gt; 패키지를 통한 비동기 및 병렬연산을 적절히 활용한다면 보다 빠르고 효율적인 R 프로그래밍을 진행 할 수 있습니다.&lt;/p&gt;
&lt;hr&gt;
&lt;h1 id="참고자료"&gt;참고자료&lt;/h1&gt;
&lt;ul&gt;
&lt;li&gt;
&lt;p&gt;
&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;
&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;
&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;
&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;
&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;
&lt;/p&gt;
&lt;/li&gt;
&lt;/ul&gt;</description></item><item><title>[R] Rstudio의 테마를 변경해 사용하기(With rsthemes Package)</title><link>https://www.jdwblog.com/post/rsthemes/</link><pubDate>Sat, 24 Oct 2020 00:00:00 +0000</pubDate><guid>https://www.jdwblog.com/post/rsthemes/</guid><description>&lt;img src="https://media.giphy.com/media/Ai6o3zm3NwvOazPxkm/giphy.gif" alt="" width="100%"/&gt;
&lt;p&gt; 데이터분석 혹은 R프로그래밍을 진행할 때 가장 많이 보는것이 (아마도) 구글, 스택오버플로우, 그리고 Rstudio일 것입니다.대다수의 R 유저들은 사용하는 IDE로서 &lt;strong&gt;Rstudio&lt;/strong&gt; 를 선호하는데요. 저 역시도 Rstudio에서 제공하는 각종 편의기능에 익숙해져 vscode와 같은 다른 IDE로 쉽사리 넘어가지 못하는것 같습니다. 그러나 오랜시간 비슷한 화면만을 보다보면 제아무리 만족스럽던 것도 점차 지루해지기 쉽상입니다. 이럴때 약간의 변화만 주어도 한결 나은 코딩을 할 수 있을텐데요. 오늘은 Rstudio에서 제공하는 기본테마를 벗어나 새롭고 다양한 테마를 제공할 뿐만아니라 테마변경을 손쉽게 하는
패키지를 소개하고자 합니다.&lt;/p&gt;
&lt;h1 id="기본-테마-변경"&gt;기본 테마 변경&lt;/h1&gt;
&lt;p&gt; Rstudio를 처음 설치하면 4개의 패널로 나뉜 흰색의 기본 테마를 마주치게 됩니다. 기본 테마 역시 멋지지만 오랜시간 흰색의 배경을 응시하다보면 눈이 쉽사리 피로해지곤 하기때문에 많은 분들이 개발환경에 있어서 밝은것보다 어두운 테마를 더욱 선호하는것 같습니다. 먼저 기본적인 Rstudio의 테마의 변경은 상단의 Tools &amp;gt; Global Options &amp;gt; Appearence 탭을 통해 변경이 가능합니다.&lt;/p&gt;
&lt;p&gt;
&lt;figure &gt;
&lt;div class="flex justify-center "&gt;
&lt;div class="w-full" &gt;
&lt;img alt=""
srcset="https://www.jdwblog.com/post/rsthemes/images/K-20201011-162316_hu_50af3171ef71179b.webp 320w, https://www.jdwblog.com/post/rsthemes/images/K-20201011-162316_hu_6fc5746b15c0f27c.webp 480w, https://www.jdwblog.com/post/rsthemes/images/K-20201011-162316_hu_36dd3c284eb690d7.webp 760w"
sizes="(max-width: 480px) 100vw, (max-width: 768px) 90vw, (max-width: 1024px) 80vw, 760px"
src="https://www.jdwblog.com/post/rsthemes/images/K-20201011-162316_hu_50af3171ef71179b.webp"
width="760"
height="412"
loading="lazy" data-zoomable /&gt;&lt;/div&gt;
&lt;/div&gt;&lt;/figure&gt;
&lt;/p&gt;
&lt;p&gt;
&lt;figure &gt;
&lt;div class="flex justify-center "&gt;
&lt;div class="w-full" &gt;
&lt;img alt=""
srcset="https://www.jdwblog.com/post/rsthemes/images/K-20201011-162354_hu_4ea584c6ebc7684e.webp 320w, https://www.jdwblog.com/post/rsthemes/images/K-20201011-162354_hu_589335c52b2aa293.webp 480w, https://www.jdwblog.com/post/rsthemes/images/K-20201011-162354_hu_9a46da250d36b985.webp 760w"
sizes="(max-width: 480px) 100vw, (max-width: 768px) 90vw, (max-width: 1024px) 80vw, 760px"
src="https://www.jdwblog.com/post/rsthemes/images/K-20201011-162354_hu_4ea584c6ebc7684e.webp"
width="760"
height="412"
loading="lazy" data-zoomable /&gt;&lt;/div&gt;
&lt;/div&gt;&lt;/figure&gt;
&lt;/p&gt;
&lt;p&gt;
&lt;figure &gt;
&lt;div class="flex justify-center "&gt;
&lt;div class="w-full" &gt;
&lt;img alt=""
srcset="https://www.jdwblog.com/post/rsthemes/images/K-20201011-162403_hu_f5853212abb63ba6.webp 320w, https://www.jdwblog.com/post/rsthemes/images/K-20201011-162403_hu_3c28e3e2d23832ae.webp 480w, https://www.jdwblog.com/post/rsthemes/images/K-20201011-162403_hu_18089b23d43439a2.webp 760w"
sizes="(max-width: 480px) 100vw, (max-width: 768px) 90vw, (max-width: 1024px) 80vw, 760px"
src="https://www.jdwblog.com/post/rsthemes/images/K-20201011-162403_hu_f5853212abb63ba6.webp"
width="760"
height="412"
loading="lazy" data-zoomable /&gt;&lt;/div&gt;
&lt;/div&gt;&lt;/figure&gt;
&lt;/p&gt;
&lt;center&gt;&lt;em&gt;기본 테마 변경 과정&lt;/em&gt;&lt;/center&gt;
&lt;h1 id="rsthemes-package"&gt;rsthemes package&lt;/h1&gt;
&lt;p&gt; 기본적으로 제공되는 테마가 불충분하다고 느껴지신다면 이 패키지가 도움이 될 수도 있습니다. 서두에서도 소개했다시피
패키지는 Rstudio에서 사용할 수 있는 90여가지의 추가적인 테마를 제공합니다.&lt;/p&gt;
&lt;h2 id="설치"&gt;설치&lt;/h2&gt;
&lt;p&gt; 
는 cran에 정식으로 등록되지 않은 패키지이기 때문에 개발자 깃헙 레포지터리에서 다운받을 수 있습니다.&lt;/p&gt;
&lt;div class="highlight"&gt;&lt;pre tabindex="0" class="chroma"&gt;&lt;code class="language-r" data-lang="r"&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="c1"&gt;# install.packages(&amp;#34;devtools&amp;#34;)&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="n"&gt;devtools&lt;/span&gt;&lt;span class="o"&gt;::&lt;/span&gt;&lt;span class="nf"&gt;install_github&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="s"&gt;&amp;#34;gadenbuie/rsthemes&amp;#34;&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;p&gt; 패키지를 다운받은 후, 추가 테마를 설치합니다.&lt;/p&gt;
&lt;div class="highlight"&gt;&lt;pre tabindex="0" class="chroma"&gt;&lt;code class="language-r" data-lang="r"&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="n"&gt;rsthemes&lt;/span&gt;&lt;span class="o"&gt;::&lt;/span&gt;&lt;span class="nf"&gt;install_rsthemes&lt;/span&gt;&lt;span class="p"&gt;()&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;p&gt;  base16테마를 설치하는 옵션을 지정하면 더욱 많은 테마를 설치할 수 있습니다.&lt;/p&gt;
&lt;div class="highlight"&gt;&lt;pre tabindex="0" class="chroma"&gt;&lt;code class="language-r" data-lang="r"&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="n"&gt;rsthemes&lt;/span&gt;&lt;span class="o"&gt;::&lt;/span&gt;&lt;span class="nf"&gt;install_rsthemes&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;include_base16&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="kc"&gt;TRUE&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;h2 id="사용"&gt;사용&lt;/h2&gt;
&lt;p&gt; 패키지와 테마의 설치까지 마치셨다면
에서 제공하는 함수들을 통해 테마를 관리 할 수 있습니다.
 맨 먼저 설치된 테마의 목록들을 확인합니다.&lt;/p&gt;
&lt;div class="highlight"&gt;&lt;pre tabindex="0" class="chroma"&gt;&lt;code class="language-r" data-lang="r"&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="c1"&gt;# 설치된 테마의 목록 확인&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="n"&gt;rsthemes&lt;/span&gt;&lt;span class="o"&gt;::&lt;/span&gt;&lt;span class="nf"&gt;list_rsthemes&lt;/span&gt;&lt;span class="p"&gt;()&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="c1"&gt;# [1] &amp;#34;a11y-dark {rsthemes}&amp;#34; &lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="c1"&gt;# [2] &amp;#34;a11y-light {rsthemes}&amp;#34; &lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="c1"&gt;# [3] &amp;#34;base16 3024 {rsthemes}&amp;#34; &lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="c1"&gt;# [4] &amp;#34;base16 Apathy {rsthemes}&amp;#34; &lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="c1"&gt;# [5] &amp;#34;base16 Ashes {rsthemes}&amp;#34; &lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="c1"&gt;# [6] &amp;#34;base16 Atelier Cave {rsthemes}&amp;#34; &lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="c1"&gt;# [7] &amp;#34;base16 Atelier Dune {rsthemes}&amp;#34; &lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="c1"&gt;# [8] &amp;#34;base16 Atelier Estuary {rsthemes}&amp;#34; &lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="c1"&gt;# [9] &amp;#34;base16 Atelier Forest {rsthemes}&amp;#34; &lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="c1"&gt;# [10] &amp;#34;base16 Atelier Heath {rsthemes}&amp;#34; &lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="c1"&gt;# [11] &amp;#34;base16 Atelier Lakeside {rsthemes}&amp;#34; &lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="c1"&gt;# [12] &amp;#34;base16 Atelier Plateau {rsthemes}&amp;#34; &lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="c1"&gt;# [13] &amp;#34;base16 Atelier Savanna {rsthemes}&amp;#34; &lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="c1"&gt;# [14] &amp;#34;base16 Atelier Seaside {rsthemes}&amp;#34; &lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="c1"&gt;# [15] &amp;#34;base16 Atelier Sulphurpool {rsthemes}&amp;#34; &lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="c1"&gt;# [16] &amp;#34;base16 Bespin {rsthemes}&amp;#34; &lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="c1"&gt;# [17] &amp;#34;base16 Brewer {rsthemes}&amp;#34; &lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="c1"&gt;# [18] &amp;#34;base16 Bright {rsthemes}&amp;#34; &lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="c1"&gt;# [19] &amp;#34;base16 Chalk {rsthemes}&amp;#34; &lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="c1"&gt;# [20] &amp;#34;base16 Codeschool {rsthemes}&amp;#34; &lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="c1"&gt;# [21] &amp;#34;base16 Cupcake {rsthemes}&amp;#34; &lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="c1"&gt;# [22] &amp;#34;base16 Darktooth {rsthemes}&amp;#34; &lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="c1"&gt;# [23] &amp;#34;base16 Default Dark {rsthemes}&amp;#34; &lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="c1"&gt;# [24] &amp;#34;base16 Default Light {rsthemes}&amp;#34; &lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="c1"&gt;# [25] &amp;#34;base16 Dracula {rsthemes}&amp;#34; &lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="c1"&gt;# [26] &amp;#34;base16 Eighties {rsthemes}&amp;#34; &lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="c1"&gt;# [27] &amp;#34;base16 Embers {rsthemes}&amp;#34; &lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="c1"&gt;# [28] &amp;#34;base16 Flat {rsthemes}&amp;#34; &lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="c1"&gt;# [29] &amp;#34;base16 Google Dark {rsthemes}&amp;#34; &lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="c1"&gt;# [30] &amp;#34;base16 Google Light {rsthemes}&amp;#34; &lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="c1"&gt;# [31] &amp;#34;base16 Grayscale Dark {rsthemes}&amp;#34; &lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="c1"&gt;# [32] &amp;#34;base16 Grayscale Light {rsthemes}&amp;#34; &lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="c1"&gt;# [33] &amp;#34;base16 Green Screen {rsthemes}&amp;#34; &lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="c1"&gt;# [34] &amp;#34;base16 Gruvbox dark, hard {rsthemes}&amp;#34; &lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="c1"&gt;# [35] &amp;#34;base16 Gruvbox dark, medium {rsthemes}&amp;#34; &lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="c1"&gt;# [36] &amp;#34;base16 Gruvbox dark, pale {rsthemes}&amp;#34; &lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="c1"&gt;# [37] &amp;#34;base16 Gruvbox dark, soft {rsthemes}&amp;#34; &lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="c1"&gt;# [38] &amp;#34;base16 Gruvbox light, hard {rsthemes}&amp;#34; &lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="c1"&gt;# [39] &amp;#34;base16 Gruvbox light, medium {rsthemes}&amp;#34;&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="c1"&gt;# [40] &amp;#34;base16 Gruvbox light, soft {rsthemes}&amp;#34; &lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="c1"&gt;# [41] &amp;#34;base16 Harmonic16 Dark {rsthemes}&amp;#34; &lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="c1"&gt;# [42] &amp;#34;base16 Harmonic16 Light {rsthemes}&amp;#34; &lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="c1"&gt;# [43] &amp;#34;base16 Hopscotch {rsthemes}&amp;#34; &lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="c1"&gt;# [44] &amp;#34;base16 IR Black {rsthemes}&amp;#34; &lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="c1"&gt;# [45] &amp;#34;base16 Isotope {rsthemes}&amp;#34; &lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="c1"&gt;# [46] &amp;#34;base16 London Tube {rsthemes}&amp;#34; &lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="c1"&gt;# [47] &amp;#34;base16 Macintosh {rsthemes}&amp;#34; &lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="c1"&gt;# [48] &amp;#34;base16 Marrakesh {rsthemes}&amp;#34; &lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="c1"&gt;# [49] &amp;#34;base16 Materia {rsthemes}&amp;#34; &lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="c1"&gt;# [50] &amp;#34;base16 Mexico Light {rsthemes}&amp;#34; &lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="c1"&gt;# [51] &amp;#34;base16 Mocha {rsthemes}&amp;#34; &lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="c1"&gt;# [52] &amp;#34;base16 Monokai {rsthemes}&amp;#34; &lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="c1"&gt;# [53] &amp;#34;base16 Nord {rsthemes}&amp;#34; &lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="c1"&gt;# [54] &amp;#34;base16 Ocean {rsthemes}&amp;#34; &lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="c1"&gt;# [55] &amp;#34;base16 OceanicNext {rsthemes}&amp;#34; &lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="c1"&gt;# [56] &amp;#34;base16 OneDark {rsthemes}&amp;#34; &lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="c1"&gt;# [57] &amp;#34;base16 Paraiso {rsthemes}&amp;#34; &lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="c1"&gt;# [58] &amp;#34;base16 PhD {rsthemes}&amp;#34; &lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="c1"&gt;# [59] &amp;#34;base16 Pico {rsthemes}&amp;#34; &lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="c1"&gt;# [60] &amp;#34;base16 Pop {rsthemes}&amp;#34; &lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="c1"&gt;# [61] &amp;#34;base16 Railscasts {rsthemes}&amp;#34; &lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="c1"&gt;# [62] &amp;#34;base16 Rebecca {rsthemes}&amp;#34; &lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="c1"&gt;# [63] &amp;#34;base16 Seti UI {rsthemes}&amp;#34; &lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="c1"&gt;# [64] &amp;#34;base16 Shapeshifter {rsthemes}&amp;#34; &lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="c1"&gt;# [65] &amp;#34;base16 Solar Flare {rsthemes}&amp;#34; &lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="c1"&gt;# [66] &amp;#34;base16 Solarized Dark {rsthemes}&amp;#34; &lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="c1"&gt;# [67] &amp;#34;base16 Solarized Light {rsthemes}&amp;#34; &lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="c1"&gt;# [68] &amp;#34;base16 Spacemacs {rsthemes}&amp;#34; &lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="c1"&gt;# [69] &amp;#34;base16 Summerfruit Dark {rsthemes}&amp;#34; &lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="c1"&gt;# [70] &amp;#34;base16 Summerfruit Light {rsthemes}&amp;#34; &lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="c1"&gt;# [71] &amp;#34;base16 Tomorrow Night {rsthemes}&amp;#34; &lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="c1"&gt;# [72] &amp;#34;base16 Tomorrow {rsthemes}&amp;#34; &lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="c1"&gt;# [73] &amp;#34;base16 Twilight {rsthemes}&amp;#34; &lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="c1"&gt;# [74] &amp;#34;base16 Unikitty Dark {rsthemes}&amp;#34; &lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="c1"&gt;# [75] &amp;#34;base16 Unikitty Light {rsthemes}&amp;#34; &lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="c1"&gt;# [76] &amp;#34;base16 Woodland {rsthemes}&amp;#34; &lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="c1"&gt;# [77] &amp;#34;Fairyfloss {rsthemes}&amp;#34; &lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="c1"&gt;# [78] &amp;#34;Flat White {rsthemes}&amp;#34; &lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="c1"&gt;# [79] &amp;#34;GitHub {rsthemes}&amp;#34; &lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="c1"&gt;# [80] &amp;#34;Nord Polar Night Aurora {rsthemes}&amp;#34; &lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="c1"&gt;# [81] &amp;#34;Nord Snow Storm {rsthemes}&amp;#34; &lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="c1"&gt;# [82] &amp;#34;Oceanic Plus {rsthemes}&amp;#34; &lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="c1"&gt;# [83] &amp;#34;One Dark {rsthemes}&amp;#34; &lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="c1"&gt;# [84] &amp;#34;One Light {rsthemes}&amp;#34; &lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="c1"&gt;# [85] &amp;#34;Solarized Dark {rsthemes}&amp;#34; &lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="c1"&gt;# [86] &amp;#34;Solarized Light {rsthemes}&amp;#34; &lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;p&gt; 다음의 함수를 통해 설치된 테마들을 하나씩 적용 할 수 있습니다.&lt;/p&gt;
&lt;div class="highlight"&gt;&lt;pre tabindex="0" class="chroma"&gt;&lt;code class="language-r" data-lang="r"&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="c1"&gt;# 테마 적용하기 &lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="n"&gt;rsthemes&lt;/span&gt;&lt;span class="o"&gt;::&lt;/span&gt;&lt;span class="nf"&gt;try_rsthemes&lt;/span&gt;&lt;span class="p"&gt;()&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="c1"&gt;# light, dark, base16 themes를 선택적으로 적용하기 &lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="n"&gt;rsthemes&lt;/span&gt;&lt;span class="o"&gt;::&lt;/span&gt;&lt;span class="nf"&gt;try_rsthemes&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="s"&gt;&amp;#34;light&amp;#34;&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;p&gt; &lt;code&gt;rstudioapi::applyTheme()&lt;/code&gt;를 사용하면 목록의 테마를 하나씩 적용할 수 있습니다.&lt;/p&gt;
&lt;div class="highlight"&gt;&lt;pre tabindex="0" class="chroma"&gt;&lt;code class="language-r" data-lang="r"&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="c1"&gt;# 특정 테마 적용하기 &lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="n"&gt;rstudioapi&lt;/span&gt;&lt;span class="o"&gt;::&lt;/span&gt;&lt;span class="nf"&gt;applyTheme&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="s"&gt;&amp;#34;One Dark {rsthemes}&amp;#34;&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;h2 id="손-쉽게-테마-변경하기"&gt;손 쉽게 테마 변경하기&lt;/h2&gt;
&lt;p&gt; 
패키지가 가진 가장 큰 강점이 여기에 있습니다. 기호에 맞는 테마를 저장하고, 이를 단축키로 등록시켜 손 쉽게 테마를 전환시킬 수 있는 기능을 지원하는데요. 이 기능을 사용하기 위해선 먼저 자신이 선호하는 테마를 등록해야 합니다.&lt;/p&gt;
&lt;h3 id="주-야간-테마"&gt;주-야간 테마&lt;/h3&gt;
&lt;p&gt; &lt;code&gt;rsthemes::set_theme_light()&lt;/code&gt;, &lt;code&gt;rsthemes::set_theme_dark()&lt;/code&gt;함수는 각각 밝은 테마, 어두운 테마 하나씩을 지정할 수 있습니다.&lt;/p&gt;
&lt;div class="highlight"&gt;&lt;pre tabindex="0" class="chroma"&gt;&lt;code class="language-r" data-lang="r"&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="c1"&gt;# 현재 사용중인 테마를 주-야간 테마로 설정하기 &lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="n"&gt;rsthemes&lt;/span&gt;&lt;span class="o"&gt;::&lt;/span&gt;&lt;span class="nf"&gt;set_theme_light&lt;/span&gt;&lt;span class="p"&gt;()&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="n"&gt;rsthemes&lt;/span&gt;&lt;span class="o"&gt;::&lt;/span&gt;&lt;span class="nf"&gt;set_theme_dark&lt;/span&gt;&lt;span class="p"&gt;()&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="c1"&gt;# 특정 테마를 주-야간 테마로 등록하기 &lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="n"&gt;rsthemes&lt;/span&gt;&lt;span class="o"&gt;::&lt;/span&gt;&lt;span class="nf"&gt;set_theme_light&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="s"&gt;&amp;#34;One Light {rsthemes}&amp;#34;&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="n"&gt;rsthemes&lt;/span&gt;&lt;span class="o"&gt;::&lt;/span&gt;&lt;span class="nf"&gt;set_theme_dark&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="s"&gt;&amp;#34;One Dark {rsthemes}&amp;#34;&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;h3 id="즐겨찾는-테마"&gt;즐겨찾는 테마&lt;/h3&gt;
&lt;p&gt; &lt;code&gt;rsthemes::set_theme_favorite()&lt;/code&gt;함수를 통해 자신이 선호하는 테마 등록이 가능합니다.&lt;/p&gt;
&lt;div class="highlight"&gt;&lt;pre tabindex="0" class="chroma"&gt;&lt;code class="language-r" data-lang="r"&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="c1"&gt;# 현재 사용중인 테마를 선호테마목록에 추가 &lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="n"&gt;rsthemes&lt;/span&gt;&lt;span class="o"&gt;::&lt;/span&gt;&lt;span class="nf"&gt;set_theme_favorite&lt;/span&gt;&lt;span class="p"&gt;()&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="c1"&gt;# 다수의 테마 선호테마목록에 추가 &lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="n"&gt;rsthemes&lt;/span&gt;&lt;span class="o"&gt;::&lt;/span&gt;&lt;span class="nf"&gt;set_theme_favorite&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; &lt;span class="nf"&gt;c&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="s"&gt;&amp;#34;GitHub {rsthemes}&amp;#34;&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="s"&gt;&amp;#34;One Light {rsthemes}&amp;#34;&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="s"&gt;&amp;#34;One Dark {rsthemes}&amp;#34;&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="p"&gt;)&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;h3 id="기본-세션에-등록"&gt;기본 세션에 등록&lt;/h3&gt;
&lt;p&gt; 위의 함수들을 통해 선호하는 테마를 지정하였습니다. 하지만 이 설정은 오직 현재 세션에만 저장이 되기 때문에 만약 Rstudio를 종료 후 다시 키거나 혹은 새로운 세션으로 접속하면 사라질 정보입니다. 때문에 기본 세션에 등록을 시켜야지만 지속적으로 사용이 가능합니다. &lt;code&gt;usethis::edit_r_profile()&lt;/code&gt;함수를 통해 &lt;code&gt;~/.Rprofile&lt;/code&gt;을 편집하여 등록한 테마를 모든 세션에서 사용 가능하도록 설정합니다.&lt;/p&gt;
&lt;div class="highlight"&gt;&lt;pre tabindex="0" class="chroma"&gt;&lt;code class="language-r" data-lang="r"&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="c1"&gt;# ~/.Rprofile&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="kr"&gt;if&lt;/span&gt; &lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="nf"&gt;interactive&lt;/span&gt;&lt;span class="p"&gt;())&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; &lt;span class="n"&gt;rsthemes&lt;/span&gt;&lt;span class="o"&gt;::&lt;/span&gt;&lt;span class="nf"&gt;set_theme_light&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="s"&gt;&amp;#34;GitHub {rsthemes}&amp;#34;&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; &lt;span class="n"&gt;rsthemes&lt;/span&gt;&lt;span class="o"&gt;::&lt;/span&gt;&lt;span class="nf"&gt;set_theme_dark&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="s"&gt;&amp;#34;Fairyfloss {rsthemes}&amp;#34;&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; &lt;span class="n"&gt;rsthemes&lt;/span&gt;&lt;span class="o"&gt;::&lt;/span&gt;&lt;span class="nf"&gt;set_theme_favorite&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; &lt;span class="nf"&gt;c&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="s"&gt;&amp;#34;GitHub {rsthemes}&amp;#34;&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; &lt;span class="s"&gt;&amp;#34;One Light {rsthemes}&amp;#34;&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; &lt;span class="s"&gt;&amp;#34;One Dark {rsthemes}&amp;#34;&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; &lt;span class="p"&gt;)&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="p"&gt;}&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;h3 id="단축키-등록"&gt;단축키 등록&lt;/h3&gt;
&lt;p&gt; &lt;code&gt;~/.Rprofile&lt;/code&gt;파일에 테마를 등록하여 저장하면 세션이 종료되거나 바뀌어도 설정은 날아가지 않습니다. 이번엔 저장된 테마를 스위칭하는 단축키를 설정하는 방법에 대해 알아보겠습니다.
패키지는 세가지 addins 기능을 지원합니다. &lt;br&gt;&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;&lt;strong&gt;Toggle Dark Mode&lt;/strong&gt; : 주-야간 테마&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Favorite Themes&lt;/strong&gt; : 즐겨찾는 테마&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Auto Dark Mode&lt;/strong&gt; : 주-야간 테마 지정된 시간에 자동 변경&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;  addins에 들어가있는 기능들은 기본적으로 Rstudio의 단축키로 설정이 가능합니다. 이 말인 즉슨 테마전환기능을 단축키로 지정해서 사용하는게 가능하다는 의미인데요. Rstudio의 단축키는 Tools &amp;gt; Modify Keyboard shortcuts에서 설정 할 수 있습니다.&lt;/p&gt;
&lt;p&gt;
&lt;figure &gt;
&lt;div class="flex justify-center "&gt;
&lt;div class="w-full" &gt;
&lt;img alt=""
srcset="https://www.jdwblog.com/post/rsthemes/images/K-001-1_hu_fc124858bc3e29c9.webp 320w, https://www.jdwblog.com/post/rsthemes/images/K-001-1_hu_d2adfd2e5a33a14d.webp 480w, https://www.jdwblog.com/post/rsthemes/images/K-001-1_hu_746bd17ef4528c7.webp 760w"
sizes="(max-width: 480px) 100vw, (max-width: 768px) 90vw, (max-width: 1024px) 80vw, 760px"
src="https://www.jdwblog.com/post/rsthemes/images/K-001-1_hu_fc124858bc3e29c9.webp"
width="760"
height="408"
loading="lazy" data-zoomable /&gt;&lt;/div&gt;
&lt;/div&gt;&lt;/figure&gt;
&lt;/p&gt;
&lt;p&gt;
&lt;figure &gt;
&lt;div class="flex justify-center "&gt;
&lt;div class="w-full" &gt;
&lt;img alt=""
srcset="https://www.jdwblog.com/post/rsthemes/images/K-20201013-102841_hu_3048f4d74f422479.webp 320w, https://www.jdwblog.com/post/rsthemes/images/K-20201013-102841_hu_27c4a7257eb4a39e.webp 480w, https://www.jdwblog.com/post/rsthemes/images/K-20201013-102841_hu_2d11329c06505b1a.webp 760w"
sizes="(max-width: 480px) 100vw, (max-width: 768px) 90vw, (max-width: 1024px) 80vw, 760px"
src="https://www.jdwblog.com/post/rsthemes/images/K-20201013-102841_hu_3048f4d74f422479.webp"
width="760"
height="408"
loading="lazy" data-zoomable /&gt;&lt;/div&gt;
&lt;/div&gt;&lt;/figure&gt;
&lt;/p&gt;
&lt;p&gt; 검색란에 &amp;rsquo;toggle&amp;rsquo;만 타이핑해도 &amp;ldquo;Toggle Dark Mode&amp;quot;이 자동완성으로 등장합니다. 이곳에 원하는 단축키를 등록합니다. 저는 단축키로 &amp;ldquo;Ctrl+Alt+D&amp;quot;를 등록하였습니다.&lt;/p&gt;
&lt;p&gt;
&lt;figure &gt;
&lt;div class="flex justify-center "&gt;
&lt;div class="w-full" &gt;
&lt;img alt=""
srcset="https://www.jdwblog.com/post/rsthemes/images/K-20201013-104228_hu_22c549206313f280.webp 320w, https://www.jdwblog.com/post/rsthemes/images/K-20201013-104228_hu_d07c9dd6a189b300.webp 480w, https://www.jdwblog.com/post/rsthemes/images/K-20201013-104228_hu_a6eedec270e85fe0.webp 760w"
sizes="(max-width: 480px) 100vw, (max-width: 768px) 90vw, (max-width: 1024px) 80vw, 760px"
src="https://www.jdwblog.com/post/rsthemes/images/K-20201013-104228_hu_22c549206313f280.webp"
width="760"
height="408"
loading="lazy" data-zoomable /&gt;&lt;/div&gt;
&lt;/div&gt;&lt;/figure&gt;
&lt;/p&gt;
&lt;p&gt;
&lt;figure &gt;
&lt;div class="flex justify-center "&gt;
&lt;div class="w-full" &gt;
&lt;img alt=""
srcset="https://www.jdwblog.com/post/rsthemes/images/K-20201013-104815_hu_cad7b8028edc2908.webp 320w, https://www.jdwblog.com/post/rsthemes/images/K-20201013-104815_hu_21404a0a0dfe7ee3.webp 480w, https://www.jdwblog.com/post/rsthemes/images/K-20201013-104815_hu_e46318f6de0d8300.webp 760w"
sizes="(max-width: 480px) 100vw, (max-width: 768px) 90vw, (max-width: 1024px) 80vw, 760px"
src="https://www.jdwblog.com/post/rsthemes/images/K-20201013-104815_hu_cad7b8028edc2908.webp"
width="760"
height="408"
loading="lazy" data-zoomable /&gt;&lt;/div&gt;
&lt;/div&gt;&lt;/figure&gt;
&lt;/p&gt;
&lt;p&gt; 이후 설정한 단축키를 누르면 주-야간테마로 전환되는 것을 확인할 수 있을 겁니다. 즐겨찾는 테마의 단축키 등록도 이와 동일한 방식으로 등록이 가능하므로 똑같은 방식이니 추가적인 설명은 생략하고 넘어가도록 하겠습니다. (단축키로 &amp;ldquo;Ctrl+Alt+N&amp;quot;을 추천합니다.)&lt;/p&gt;
&lt;p&gt; addins의 마지막 기능인 &lt;strong&gt;Auto Dark Mode&lt;/strong&gt;를 활성화하면 Rstudio가 정해진 시간에 맞춰서 주간테마, 야간테마를 자동으로 전환됩니다 직접 테마를 바꾸거나 단축키 등록을 하지 않더라도 이것만 설정하면 낮과 밤에 따라 테마를 변경시킬 수 있는데요. 이 기능은 단축키 등록이 아닌 아까 살펴봤던 &lt;code&gt;~/.Rprofile&lt;/code&gt;의 수정을 통해 가능합니다. 콘솔창에 다시 한번 &lt;code&gt;usethis::edit_r_profile()&lt;/code&gt;함수를 입력합니다.&lt;/p&gt;
&lt;div class="highlight"&gt;&lt;pre tabindex="0" class="chroma"&gt;&lt;code class="language-r" data-lang="r"&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="c1"&gt;# ~/.Rprofile&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="kr"&gt;if&lt;/span&gt; &lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="nf"&gt;interactive&lt;/span&gt;&lt;span class="p"&gt;())&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; &lt;span class="n"&gt;rsthemes&lt;/span&gt;&lt;span class="o"&gt;::&lt;/span&gt;&lt;span class="nf"&gt;set_theme_light&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="s"&gt;&amp;#34;GitHub {rsthemes}&amp;#34;&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt; &lt;span class="c1"&gt;# 주간 테마 &lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; &lt;span class="n"&gt;rsthemes&lt;/span&gt;&lt;span class="o"&gt;::&lt;/span&gt;&lt;span class="nf"&gt;set_theme_dark&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="s"&gt;&amp;#34;Fairyfloss {rsthemes}&amp;#34;&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt; &lt;span class="c1"&gt;# 야간 테마 &lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; &lt;span class="n"&gt;rsthemes&lt;/span&gt;&lt;span class="o"&gt;::&lt;/span&gt;&lt;span class="nf"&gt;set_theme_favorite&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt; &lt;span class="c1"&gt;# 즐겨찾는 테마 &lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; &lt;span class="nf"&gt;c&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="s"&gt;&amp;#34;GitHub {rsthemes}&amp;#34;&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; &lt;span class="s"&gt;&amp;#34;One Light {rsthemes}&amp;#34;&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; &lt;span class="s"&gt;&amp;#34;One Dark {rsthemes}&amp;#34;&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; &lt;span class="p"&gt;)&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; &lt;span class="c1"&gt;# 주-야간 테마 지정된 시간에 자동 변경&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; &lt;span class="nf"&gt;setHook&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="s"&gt;&amp;#34;rstudio.sessionInit&amp;#34;&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="kr"&gt;function&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;isNewSession&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; &lt;span class="n"&gt;rsthemes&lt;/span&gt;&lt;span class="o"&gt;::&lt;/span&gt;&lt;span class="nf"&gt;use_theme_auto&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;dark_start&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="nf"&gt;as.POSIXct&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="s"&gt;&amp;#39;17:00&amp;#39;&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="n"&gt;format&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="s"&gt;&amp;#34;%H:%M&amp;#34;&lt;/span&gt;&lt;span class="p"&gt;),&lt;/span&gt; &lt;span class="n"&gt;dark_end&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="nf"&gt;as.POSIXct&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="s"&gt;&amp;#39;09:00&amp;#39;&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="n"&gt;format&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="s"&gt;&amp;#34;%H:%M&amp;#34;&lt;/span&gt;&lt;span class="p"&gt;))&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; &lt;span class="p"&gt;},&lt;/span&gt; &lt;span class="n"&gt;action&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="s"&gt;&amp;#34;append&amp;#34;&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="p"&gt;}&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;p&gt; &lt;code&gt;~/.Rprofile&lt;/code&gt;에 &lt;em&gt;&amp;lsquo;주-야간 테마 지정된 시간에 자동 변경&amp;rsquo;&lt;/em&gt; 코드를 추가하였습니다. 만약 이와 같이 설정하면 17:00에 자동으로 야간테마로 전환되고, 다음날 09:00가 되면 주간 테마로 전환될 것입니다. 함수 내부에 &lt;code&gt;as.POSIXct()&lt;/code&gt;값을 조정하여 테마가 전환되는 시간을 조정할 수 있습니다.&lt;/p&gt;
&lt;hr&gt;
&lt;h1 id="참고자료"&gt;참고자료&lt;/h1&gt;
&lt;ul&gt;
&lt;li&gt;
&lt;/li&gt;
&lt;/ul&gt;</description></item><item><title>[R] stringr 패키지를 사용한 정규표현식</title><link>https://www.jdwblog.com/post/regexwithstringr/</link><pubDate>Sat, 03 Oct 2020 00:00:00 +0000</pubDate><guid>https://www.jdwblog.com/post/regexwithstringr/</guid><description>&lt;img src="images/stringr_logo.png" alt="" width="50%"/&gt;
&lt;p&gt; 이전 장에서 R에서 사용되는 정규표현식에 대해 알아보았었는데요. 오늘은 정규표현식을 텍스트 데이터를 처리할때 사용하는 패키지인 &lt;strong&gt;&lt;code&gt;stringr&lt;/code&gt;&lt;/strong&gt; 과 함께 사용하는 방법에 대해 알아보도록 하겠습니다.&lt;/p&gt;
&lt;h1 id="stringr"&gt;stringr&lt;/h1&gt;
&lt;p&gt;  &lt;strong&gt;&lt;code&gt;stringr&lt;/code&gt;&lt;/strong&gt; 패키지는 Rstudio의 Hadley Wickham이 개발한 패키지입니다. &lt;strong&gt;&lt;code&gt;dplyr&lt;/code&gt;&lt;/strong&gt; , &lt;strong&gt;&lt;code&gt;ggplot2&lt;/code&gt;&lt;/strong&gt; 등과 같이 데이터를 깔끔한(tidy) 방식으로 처리하는것을 지향하는 &lt;strong&gt;&lt;code&gt;tidyverse&lt;/code&gt;&lt;/strong&gt; 패키지군에 속해 있으며, 그 중 &lt;strong&gt;&lt;code&gt;stringr&lt;/code&gt;&lt;/strong&gt; 은 문자열 처리에 특화된 패키지입니다. &amp;lsquo;string&amp;rsquo;의 준말인 &lt;code&gt;str_&lt;/code&gt;이 함수 머릿말에 항상 등장하는 것이 특징입니다.&lt;/p&gt;
&lt;p&gt;  &lt;strong&gt;&lt;code&gt;stringr&lt;/code&gt;&lt;/strong&gt; 패키지의 주요 기능을 아래와 같이 분류하였고 각 경우에 맞는 상황을 가정하여 알아보도록 하겠습니다.&lt;/p&gt;
&lt;p&gt;
&lt;br&gt;
&lt;br&gt;
&lt;br&gt;
&lt;br&gt;
&lt;br&gt;
&lt;br&gt;&lt;/p&gt;
&lt;h2 id="예제-문장"&gt;예제 문장&lt;/h2&gt;
&lt;p&gt; 연습용으로 사용할 문장은 stringr 패키지에 내장되어 있는 &lt;code&gt;sentence&lt;/code&gt; 데이터를 사용하겠습니다. &lt;code&gt;sentence&lt;/code&gt;는 총 1000문장으로 구성되어 있는데, 문장 전체를 사용할 필요가 없으므로 10문장 정도만을 추려서 사용하도록 하겠습니다.&lt;/p&gt;
&lt;div class="highlight"&gt;&lt;pre tabindex="0" class="chroma"&gt;&lt;code class="language-r" data-lang="r"&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="n"&gt;regex_sentences&lt;/span&gt; &lt;span class="o"&gt;&amp;lt;-&lt;/span&gt; &lt;span class="n"&gt;stringr&lt;/span&gt;&lt;span class="o"&gt;::&lt;/span&gt;&lt;span class="n"&gt;sentences[1&lt;/span&gt;&lt;span class="o"&gt;:&lt;/span&gt;&lt;span class="m"&gt;10&lt;/span&gt;&lt;span class="n"&gt;]&lt;/span&gt; &lt;span class="c1"&gt;# 예제용 문장 생성&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="n"&gt;regex_sentences&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="c1"&gt;#&amp;gt; [1] &amp;#34;The birch canoe slid on the smooth planks.&amp;#34; &lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="c1"&gt;#&amp;gt; [2] &amp;#34;Glue the sheet to the dark blue background.&amp;#34;&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="c1"&gt;#&amp;gt; [3] &amp;#34;It&amp;#39;s easy to tell the depth of a well.&amp;#34; &lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="c1"&gt;#&amp;gt; [4] &amp;#34;These days a chicken leg is a rare dish.&amp;#34; &lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="c1"&gt;#&amp;gt; [5] &amp;#34;Rice is often served in round bowls.&amp;#34; &lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="c1"&gt;#&amp;gt; [6] &amp;#34;The juice of lemons makes fine punch.&amp;#34; &lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="c1"&gt;#&amp;gt; [7] &amp;#34;The box was thrown beside the parked truck.&amp;#34;&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="c1"&gt;#&amp;gt; [8] &amp;#34;The hogs were fed chopped corn and garbage.&amp;#34;&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="c1"&gt;#&amp;gt; [9] &amp;#34;Four hours of steady work faced us.&amp;#34; &lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="c1"&gt;#&amp;gt; [10] &amp;#34;Large size in stockings is hard to sell.&amp;#34;&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;h3 id="일치"&gt;일치&lt;/h3&gt;
&lt;ul&gt;
&lt;li&gt; &lt;code&gt;str_detect()&lt;/code&gt;함수는 특정 문자 혹은 패턴(정규표현식)과 일치하는 경우를 찾을때 사용하며, 실행 결과로서 boolean(참, 거짓)을 반환합니다.&lt;/li&gt;
&lt;/ul&gt;
&lt;div class="highlight"&gt;&lt;pre tabindex="0" class="chroma"&gt;&lt;code class="language-r" data-lang="r"&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="nf"&gt;str_detect&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;regex_sentences&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="s"&gt;&amp;#39;[aeiou]&amp;#39;&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt; &lt;span class="c1"&gt;# 알파벳 모음 &amp;#39;a&amp;#39; or &amp;#39;e&amp;#39; or &amp;#39;i&amp;#39; or &amp;#39;o&amp;#39; or &amp;#39;u&amp;#39;가 있을 경우 TRUE&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="c1"&gt;#&amp;gt; [1] TRUE TRUE TRUE TRUE TRUE TRUE TRUE TRUE TRUE TRUE&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;div class="highlight"&gt;&lt;pre tabindex="0" class="chroma"&gt;&lt;code class="language-r" data-lang="r"&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="nf"&gt;str_detect&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;regex_sentences&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="s"&gt;&amp;#39;[easy]&amp;#39;&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt; &lt;span class="c1"&gt;# 알파벳 &amp;#39;e&amp;#39; or &amp;#39;a&amp;#39; or &amp;#39;s&amp;#39; or &amp;#39;y&amp;#39;가 있을 경우 TRUE &lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="c1"&gt;#&amp;gt; [1] TRUE TRUE TRUE TRUE TRUE TRUE TRUE TRUE TRUE TRUE&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;div class="highlight"&gt;&lt;pre tabindex="0" class="chroma"&gt;&lt;code class="language-r" data-lang="r"&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="nf"&gt;str_detect&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;regex_sentences&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="s"&gt;&amp;#39;(easy)&amp;#39;&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt; &lt;span class="c1"&gt;# 알파벳 &amp;#39;easy&amp;#39;가 있을 경우 TRUE &lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="c1"&gt;#&amp;gt; [1] FALSE FALSE TRUE FALSE FALSE FALSE FALSE FALSE FALSE FALSE&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;ul&gt;
&lt;li&gt; &lt;code&gt;str_extract()&lt;/code&gt;함수는 특정 문자 혹은 패턴(정규표현식)과 일치하는 경우, 그것을 반환합니다.&lt;/li&gt;
&lt;/ul&gt;
&lt;div class="highlight"&gt;&lt;pre tabindex="0" class="chroma"&gt;&lt;code class="language-r" data-lang="r"&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="nf"&gt;str_extract&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;regex_sentences&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="s"&gt;&amp;#39;[aeiou]&amp;#39;&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt; &lt;span class="c1"&gt;# &amp;#39;a&amp;#39; or &amp;#39;e&amp;#39; or &amp;#39;i&amp;#39; or &amp;#39;o&amp;#39; or &amp;#39;u&amp;#39; 글자가 존재하면 그것을 반환 &lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="c1"&gt;#&amp;gt; [1] &amp;#34;e&amp;#34; &amp;#34;u&amp;#34; &amp;#34;e&amp;#34; &amp;#34;e&amp;#34; &amp;#34;i&amp;#34; &amp;#34;e&amp;#34; &amp;#34;e&amp;#34; &amp;#34;e&amp;#34; &amp;#34;o&amp;#34; &amp;#34;a&amp;#34;&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;div class="highlight"&gt;&lt;pre tabindex="0" class="chroma"&gt;&lt;code class="language-r" data-lang="r"&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="nf"&gt;str_extract&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;regex_sentences&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="s"&gt;&amp;#39;[:punct:]&amp;#39;&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt; &lt;span class="c1"&gt;# 문장부호가 존재하면 그것을 반환 &lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="c1"&gt;#&amp;gt; [1] &amp;#34;.&amp;#34; &amp;#34;.&amp;#34; &amp;#34;&amp;#39;&amp;#34; &amp;#34;.&amp;#34; &amp;#34;.&amp;#34; &amp;#34;.&amp;#34; &amp;#34;.&amp;#34; &amp;#34;.&amp;#34; &amp;#34;.&amp;#34; &amp;#34;.&amp;#34;&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;p&gt; 함수는 조건에 일치하는 결과를 반환하였는데요. 자세히 보면 조건에 일치한 것이 여러개 있음에도 불구하고 오직 최초 값만을 반환하는 것을 볼 수 있습니다. 그렇다면 조건에 일치하는 모든 값을 찾고자 할 땐 어떻게 해야할까요? 바로 &lt;code&gt;str_extract_all()&lt;/code&gt; 함수를 사용하면 됩니다. &lt;strong&gt;&lt;code&gt;stringr&lt;/code&gt;&lt;/strong&gt; 패키지 함수 중 몇몇의 함수는 함수 말미에 &lt;code&gt;_all&lt;/code&gt;이 붙는 함수들이 있습니다. 이들 함수들은 조건에 맞는 모든 값을 반환하는 특징이 있습니다.&lt;/p&gt;
&lt;div class="highlight"&gt;&lt;pre tabindex="0" class="chroma"&gt;&lt;code class="language-r" data-lang="r"&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="nf"&gt;str_extract_all&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;regex_sentences&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="s"&gt;&amp;#39;[aeiou]&amp;#39;&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="c1"&gt;#&amp;gt; [[1]]&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="c1"&gt;#&amp;gt; [1] &amp;#34;e&amp;#34; &amp;#34;i&amp;#34; &amp;#34;a&amp;#34; &amp;#34;o&amp;#34; &amp;#34;e&amp;#34; &amp;#34;i&amp;#34; &amp;#34;o&amp;#34; &amp;#34;e&amp;#34; &amp;#34;o&amp;#34; &amp;#34;o&amp;#34; &amp;#34;a&amp;#34;&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="c1"&gt;#&amp;gt; &lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="c1"&gt;#&amp;gt; [[2]]&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="c1"&gt;#&amp;gt; [1] &amp;#34;u&amp;#34; &amp;#34;e&amp;#34; &amp;#34;e&amp;#34; &amp;#34;e&amp;#34; &amp;#34;e&amp;#34; &amp;#34;o&amp;#34; &amp;#34;e&amp;#34; &amp;#34;a&amp;#34; &amp;#34;u&amp;#34; &amp;#34;e&amp;#34; &amp;#34;a&amp;#34; &amp;#34;o&amp;#34; &amp;#34;u&amp;#34;&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="c1"&gt;#&amp;gt; &lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="c1"&gt;#&amp;gt; [[3]]&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="c1"&gt;#&amp;gt; [1] &amp;#34;e&amp;#34; &amp;#34;a&amp;#34; &amp;#34;o&amp;#34; &amp;#34;e&amp;#34; &amp;#34;e&amp;#34; &amp;#34;e&amp;#34; &amp;#34;o&amp;#34; &amp;#34;a&amp;#34; &amp;#34;e&amp;#34;&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="c1"&gt;#&amp;gt; &lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="c1"&gt;#&amp;gt; [[4]]&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="c1"&gt;#&amp;gt; [1] &amp;#34;e&amp;#34; &amp;#34;e&amp;#34; &amp;#34;a&amp;#34; &amp;#34;a&amp;#34; &amp;#34;i&amp;#34; &amp;#34;e&amp;#34; &amp;#34;e&amp;#34; &amp;#34;i&amp;#34; &amp;#34;a&amp;#34; &amp;#34;a&amp;#34; &amp;#34;e&amp;#34; &amp;#34;i&amp;#34;&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="c1"&gt;#&amp;gt; &lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="c1"&gt;#&amp;gt; [[5]]&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="c1"&gt;#&amp;gt; [1] &amp;#34;i&amp;#34; &amp;#34;e&amp;#34; &amp;#34;i&amp;#34; &amp;#34;o&amp;#34; &amp;#34;e&amp;#34; &amp;#34;e&amp;#34; &amp;#34;e&amp;#34; &amp;#34;i&amp;#34; &amp;#34;o&amp;#34; &amp;#34;u&amp;#34; &amp;#34;o&amp;#34;&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="c1"&gt;#&amp;gt; &lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="c1"&gt;#&amp;gt; [[6]]&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="c1"&gt;#&amp;gt; [1] &amp;#34;e&amp;#34; &amp;#34;u&amp;#34; &amp;#34;i&amp;#34; &amp;#34;e&amp;#34; &amp;#34;o&amp;#34; &amp;#34;e&amp;#34; &amp;#34;o&amp;#34; &amp;#34;a&amp;#34; &amp;#34;e&amp;#34; &amp;#34;i&amp;#34; &amp;#34;e&amp;#34; &amp;#34;u&amp;#34;&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="c1"&gt;#&amp;gt; &lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="c1"&gt;#&amp;gt; [[7]]&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="c1"&gt;#&amp;gt; [1] &amp;#34;e&amp;#34; &amp;#34;o&amp;#34; &amp;#34;a&amp;#34; &amp;#34;o&amp;#34; &amp;#34;e&amp;#34; &amp;#34;i&amp;#34; &amp;#34;e&amp;#34; &amp;#34;e&amp;#34; &amp;#34;a&amp;#34; &amp;#34;e&amp;#34; &amp;#34;u&amp;#34;&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="c1"&gt;#&amp;gt; &lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="c1"&gt;#&amp;gt; [[8]]&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="c1"&gt;#&amp;gt; [1] &amp;#34;e&amp;#34; &amp;#34;o&amp;#34; &amp;#34;e&amp;#34; &amp;#34;e&amp;#34; &amp;#34;e&amp;#34; &amp;#34;o&amp;#34; &amp;#34;e&amp;#34; &amp;#34;o&amp;#34; &amp;#34;a&amp;#34; &amp;#34;a&amp;#34; &amp;#34;a&amp;#34; &amp;#34;e&amp;#34;&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="c1"&gt;#&amp;gt; &lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="c1"&gt;#&amp;gt; [[9]]&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="c1"&gt;#&amp;gt; [1] &amp;#34;o&amp;#34; &amp;#34;u&amp;#34; &amp;#34;o&amp;#34; &amp;#34;u&amp;#34; &amp;#34;o&amp;#34; &amp;#34;e&amp;#34; &amp;#34;a&amp;#34; &amp;#34;o&amp;#34; &amp;#34;a&amp;#34; &amp;#34;e&amp;#34; &amp;#34;u&amp;#34;&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="c1"&gt;#&amp;gt; &lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="c1"&gt;#&amp;gt; [[10]]&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="c1"&gt;#&amp;gt; [1] &amp;#34;a&amp;#34; &amp;#34;e&amp;#34; &amp;#34;i&amp;#34; &amp;#34;e&amp;#34; &amp;#34;i&amp;#34; &amp;#34;o&amp;#34; &amp;#34;i&amp;#34; &amp;#34;i&amp;#34; &amp;#34;a&amp;#34; &amp;#34;o&amp;#34; &amp;#34;e&amp;#34;&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;div class="highlight"&gt;&lt;pre tabindex="0" class="chroma"&gt;&lt;code class="language-r" data-lang="r"&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="nf"&gt;str_extract_all&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;regex_sentences&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="s"&gt;&amp;#39;[:punct:]&amp;#39;&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="c1"&gt;#&amp;gt; [[1]]&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="c1"&gt;#&amp;gt; [1] &amp;#34;.&amp;#34;&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="c1"&gt;#&amp;gt; &lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="c1"&gt;#&amp;gt; [[2]]&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="c1"&gt;#&amp;gt; [1] &amp;#34;.&amp;#34;&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="c1"&gt;#&amp;gt; &lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="c1"&gt;#&amp;gt; [[3]]&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="c1"&gt;#&amp;gt; [1] &amp;#34;&amp;#39;&amp;#34; &amp;#34;.&amp;#34;&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="c1"&gt;#&amp;gt; &lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="c1"&gt;#&amp;gt; [[4]]&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="c1"&gt;#&amp;gt; [1] &amp;#34;.&amp;#34;&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="c1"&gt;#&amp;gt; &lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="c1"&gt;#&amp;gt; [[5]]&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="c1"&gt;#&amp;gt; [1] &amp;#34;.&amp;#34;&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="c1"&gt;#&amp;gt; &lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="c1"&gt;#&amp;gt; [[6]]&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="c1"&gt;#&amp;gt; [1] &amp;#34;.&amp;#34;&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="c1"&gt;#&amp;gt; &lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="c1"&gt;#&amp;gt; [[7]]&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="c1"&gt;#&amp;gt; [1] &amp;#34;.&amp;#34;&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="c1"&gt;#&amp;gt; &lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="c1"&gt;#&amp;gt; [[8]]&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="c1"&gt;#&amp;gt; [1] &amp;#34;.&amp;#34;&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="c1"&gt;#&amp;gt; &lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="c1"&gt;#&amp;gt; [[9]]&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="c1"&gt;#&amp;gt; [1] &amp;#34;.&amp;#34;&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="c1"&gt;#&amp;gt; &lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="c1"&gt;#&amp;gt; [[10]]&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="c1"&gt;#&amp;gt; [1] &amp;#34;.&amp;#34;&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;p&gt; &lt;code&gt;str_extract_all()&lt;/code&gt; 함수의 결과, 조건에 부합하는 모든 값이 list 형으로 반환된 것을 볼 수 있습니다.&lt;/p&gt;
&lt;h3 id="카운팅"&gt;카운팅&lt;/h3&gt;
&lt;ul&gt;
&lt;li&gt; &lt;code&gt;str_count()&lt;/code&gt;함수는 특정 문자 혹은 패턴(정규표현식)과 일치하는 경우를 계산합니다.&lt;/li&gt;
&lt;/ul&gt;
&lt;div class="highlight"&gt;&lt;pre tabindex="0" class="chroma"&gt;&lt;code class="language-r" data-lang="r"&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="nf"&gt;str_count&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;regex_sentences&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="s"&gt;&amp;#39;[aeiou]&amp;#39;&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt; &lt;span class="c1"&gt;# &amp;#39;a&amp;#39; or &amp;#39;e&amp;#39; or &amp;#39;i&amp;#39; or &amp;#39;o&amp;#39; or &amp;#39;u&amp;#39; 문자의 개수를 반환 &lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="c1"&gt;#&amp;gt; [1] 11 13 9 12 11 12 11 12 11 11&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;div class="highlight"&gt;&lt;pre tabindex="0" class="chroma"&gt;&lt;code class="language-r" data-lang="r"&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="nf"&gt;str_count&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;regex_sentences&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="s"&gt;&amp;#39;^(The)&amp;#39;&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt; &lt;span class="c1"&gt;# 시작이 &amp;#39;The&amp;#39;인 경우를 셈 &lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="c1"&gt;#&amp;gt; [1] 1 0 0 1 0 1 1 1 0 0&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;h3 id="포함"&gt;포함&lt;/h3&gt;
&lt;ul&gt;
&lt;li&gt; &lt;code&gt;str_subset()&lt;/code&gt;함수는 특정 문자 혹은 패턴(정규표현식)이 포함된 경우를 반환합니다.&lt;/li&gt;
&lt;/ul&gt;
&lt;div class="highlight"&gt;&lt;pre tabindex="0" class="chroma"&gt;&lt;code class="language-r" data-lang="r"&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="nf"&gt;str_subset&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;regex_sentences&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="s"&gt;&amp;#39;[aeiou]&amp;#39;&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt; &lt;span class="c1"&gt;# &amp;#39;a&amp;#39; or &amp;#39;e&amp;#39; or &amp;#39;i&amp;#39; or &amp;#39;o&amp;#39; or &amp;#39;u&amp;#39; 문자가 포함된 경우를 반환 &lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="c1"&gt;#&amp;gt; [1] &amp;#34;The birch canoe slid on the smooth planks.&amp;#34; &lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="c1"&gt;#&amp;gt; [2] &amp;#34;Glue the sheet to the dark blue background.&amp;#34;&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="c1"&gt;#&amp;gt; [3] &amp;#34;It&amp;#39;s easy to tell the depth of a well.&amp;#34; &lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="c1"&gt;#&amp;gt; [4] &amp;#34;These days a chicken leg is a rare dish.&amp;#34; &lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="c1"&gt;#&amp;gt; [5] &amp;#34;Rice is often served in round bowls.&amp;#34; &lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="c1"&gt;#&amp;gt; [6] &amp;#34;The juice of lemons makes fine punch.&amp;#34; &lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="c1"&gt;#&amp;gt; [7] &amp;#34;The box was thrown beside the parked truck.&amp;#34;&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="c1"&gt;#&amp;gt; [8] &amp;#34;The hogs were fed chopped corn and garbage.&amp;#34;&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="c1"&gt;#&amp;gt; [9] &amp;#34;Four hours of steady work faced us.&amp;#34; &lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="c1"&gt;#&amp;gt; [10] &amp;#34;Large size in stockings is hard to sell.&amp;#34;&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;div class="highlight"&gt;&lt;pre tabindex="0" class="chroma"&gt;&lt;code class="language-r" data-lang="r"&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="nf"&gt;str_subset&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;regex_sentences&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="s"&gt;&amp;#39;^(The)&amp;#39;&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt; &lt;span class="c1"&gt;# 시작이 &amp;#39;The&amp;#39;인 문장을 반환&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="c1"&gt;#&amp;gt; [1] &amp;#34;The birch canoe slid on the smooth planks.&amp;#34; &lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="c1"&gt;#&amp;gt; [2] &amp;#34;These days a chicken leg is a rare dish.&amp;#34; &lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="c1"&gt;#&amp;gt; [3] &amp;#34;The juice of lemons makes fine punch.&amp;#34; &lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="c1"&gt;#&amp;gt; [4] &amp;#34;The box was thrown beside the parked truck.&amp;#34;&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="c1"&gt;#&amp;gt; [5] &amp;#34;The hogs were fed chopped corn and garbage.&amp;#34;&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;div class="highlight"&gt;&lt;pre tabindex="0" class="chroma"&gt;&lt;code class="language-r" data-lang="r"&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="nf"&gt;str_subset&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;regex_sentences&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="s"&gt;&amp;#39;p[:alpha:]{1,}\\.$&amp;#39;&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt; &lt;span class="c1"&gt;# &amp;#39;p&amp;#39;뒤에 알파벳이 한번 이상 나오면서 마침표로 끝나는 경우 &lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="c1"&gt;#&amp;gt; [1] &amp;#34;The birch canoe slid on the smooth planks.&amp;#34;&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="c1"&gt;#&amp;gt; [2] &amp;#34;The juice of lemons makes fine punch.&amp;#34;&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;h3 id="위치"&gt;위치&lt;/h3&gt;
&lt;ul&gt;
&lt;li&gt; &lt;code&gt;str_locate()&lt;/code&gt;함수는 특정 문자 혹은 패턴(정규표현식)에 맞는 경우의 시작 지점과 끝 지점을 반환합니다. R에 기본적으로 내장되어 있는 영어 소문자 데이터인 &lt;code&gt;letters&lt;/code&gt;를 통해 알아보겠습니다.&lt;/li&gt;
&lt;/ul&gt;
&lt;div class="highlight"&gt;&lt;pre tabindex="0" class="chroma"&gt;&lt;code class="language-r" data-lang="r"&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="kc"&gt;letters&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="c1"&gt;#&amp;gt; [1] &amp;#34;a&amp;#34; &amp;#34;b&amp;#34; &amp;#34;c&amp;#34; &amp;#34;d&amp;#34; &amp;#34;e&amp;#34; &amp;#34;f&amp;#34; &amp;#34;g&amp;#34; &amp;#34;h&amp;#34; &amp;#34;i&amp;#34; &amp;#34;j&amp;#34; &amp;#34;k&amp;#34; &amp;#34;l&amp;#34; &amp;#34;m&amp;#34; &amp;#34;n&amp;#34; &amp;#34;o&amp;#34; &amp;#34;p&amp;#34; &amp;#34;q&amp;#34; &amp;#34;r&amp;#34; &amp;#34;s&amp;#34;&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="c1"&gt;#&amp;gt; [20] &amp;#34;t&amp;#34; &amp;#34;u&amp;#34; &amp;#34;v&amp;#34; &amp;#34;w&amp;#34; &amp;#34;x&amp;#34; &amp;#34;y&amp;#34; &amp;#34;z&amp;#34;&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;p&gt; 패턴의 위치를 찾기 위해선 하나로 묶인 데이터가 필요하므로 &lt;code&gt;str_c()&lt;/code&gt; 함수를 사용하여 하나의 벡터로 묶었습니다. (&lt;code&gt;str_c()&lt;/code&gt;함수는 __&lt;code&gt;stringr&lt;/code&gt;__패키지의 문자를 결합하는 함수. R의 내장함수인 &lt;code&gt;paste()&lt;/code&gt;와 동일하게 동작)&lt;/p&gt;
&lt;div class="highlight"&gt;&lt;pre tabindex="0" class="chroma"&gt;&lt;code class="language-r" data-lang="r"&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="kc"&gt;letters&lt;/span&gt; &lt;span class="o"&gt;&amp;lt;-&lt;/span&gt; &lt;span class="nf"&gt;str_c&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="kc"&gt;letters&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="n"&gt;collapse&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="s"&gt;&amp;#39;&amp;#39;&lt;/span&gt;&lt;span class="p"&gt;);&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="kc"&gt;letters&lt;/span&gt; &lt;span class="c1"&gt;# 하나의 벡터값으로 변환 &lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="c1"&gt;#&amp;gt; [1] &amp;#34;abcdefghijklmnopqrstuvwxyz&amp;#34;&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;div class="highlight"&gt;&lt;pre tabindex="0" class="chroma"&gt;&lt;code class="language-r" data-lang="r"&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="nf"&gt;str_locate&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="kc"&gt;letters&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="s"&gt;&amp;#39;[a-z]+&amp;#39;&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt; &lt;span class="c1"&gt;# &amp;#39;a&amp;#39;부터 &amp;#39;z&amp;#39; 까지의 문자가 한개 이상 나오는 경우의 시작과 끝을 반환 &lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="c1"&gt;#&amp;gt; start end&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="c1"&gt;#&amp;gt; [1,] 1 26&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;div class="highlight"&gt;&lt;pre tabindex="0" class="chroma"&gt;&lt;code class="language-r" data-lang="r"&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="nf"&gt;str_locate&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="kc"&gt;letters&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="s"&gt;&amp;#39;^[a][a-z]+[z]$&amp;#39;&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt; &lt;span class="c1"&gt;# 시작이 &amp;#39;a&amp;#39;이며, 바로 뒤에 &amp;#39;a&amp;#39; 부터 &amp;#39;z&amp;#39;까지의 문자 중 하나가 한번 이상 나오며, 끝이 &amp;#39;z&amp;#39;인 경우의 시작 지점과 끝 지점을 반환.&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="c1"&gt;#&amp;gt; start end&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="c1"&gt;#&amp;gt; [1,] 1 26&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;div class="highlight"&gt;&lt;pre tabindex="0" class="chroma"&gt;&lt;code class="language-r" data-lang="r"&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="nf"&gt;str_locate&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="kc"&gt;letters&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="s"&gt;&amp;#39;^[a-z][a-z]+$&amp;#39;&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt; &lt;span class="c1"&gt;# 시작이 &amp;#39;a&amp;#39; 부터 &amp;#39;z&amp;#39; 까지의 문자 중 하나이며, 끝이 &amp;#39;a&amp;#39; 부터 &amp;#39;z&amp;#39; 까지의 문자 중 하나인 경우의 시작 지점과 끝 지점.&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="c1"&gt;#&amp;gt; start end&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="c1"&gt;#&amp;gt; [1,] 1 26&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;div class="highlight"&gt;&lt;pre tabindex="0" class="chroma"&gt;&lt;code class="language-r" data-lang="r"&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="nf"&gt;str_locate&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="kc"&gt;letters&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="s"&gt;&amp;#39;(abcde)&amp;#39;&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt; &lt;span class="c1"&gt;# &amp;#39;abcde&amp;#39;의 시작 지점과 끝 지점을 반환 &lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="c1"&gt;#&amp;gt; start end&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="c1"&gt;#&amp;gt; [1,] 1 5&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;div class="highlight"&gt;&lt;pre tabindex="0" class="chroma"&gt;&lt;code class="language-r" data-lang="r"&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="nf"&gt;str_locate&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="kc"&gt;letters&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="s"&gt;&amp;#39;(xyz)&amp;#39;&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt; &lt;span class="c1"&gt;# &amp;#39;xyz&amp;#39;의 시작 지점과 끝 지점을 반환 &lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="c1"&gt;#&amp;gt; start end&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="c1"&gt;#&amp;gt; [1,] 24 26&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;p&gt; &lt;code&gt;str_locate_all()&lt;/code&gt;함수를 통해 조건에 맞는 모든 값의 위치를 추출할 수 있습니다.&lt;/p&gt;
&lt;div class="highlight"&gt;&lt;pre tabindex="0" class="chroma"&gt;&lt;code class="language-r" data-lang="r"&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="nf"&gt;str_locate&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="kc"&gt;letters&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="s"&gt;&amp;#39;[aeiou][^aeiou]+&amp;#39;&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt; &lt;span class="c1"&gt;# &amp;#39;a&amp;#39; or &amp;#39;e&amp;#39; or &amp;#39;i&amp;#39; or &amp;#39;o&amp;#39; or &amp;#39;u&amp;#39;문자 뒤에 &amp;#39;a&amp;#39; or &amp;#39;e&amp;#39; or &amp;#39;i&amp;#39; or &amp;#39;o&amp;#39; or &amp;#39;u&amp;#39; 문자가 아닌 문자가 하나 이상 나오는 최초 경우의 시작 지점과 끝 지점을 반환 &lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="c1"&gt;#&amp;gt; start end&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="c1"&gt;#&amp;gt; [1,] 1 4&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;div class="highlight"&gt;&lt;pre tabindex="0" class="chroma"&gt;&lt;code class="language-r" data-lang="r"&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="nf"&gt;str_locate_all&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="kc"&gt;letters&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="s"&gt;&amp;#39;[aeiou][^aeiou]+&amp;#39;&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt; &lt;span class="c1"&gt;# &amp;#39;a&amp;#39; or &amp;#39;e&amp;#39; or &amp;#39;i&amp;#39; or &amp;#39;o&amp;#39; or &amp;#39;u&amp;#39;문자 뒤에 &amp;#39;a&amp;#39; or &amp;#39;e&amp;#39; or &amp;#39;i&amp;#39; or &amp;#39;o&amp;#39; or &amp;#39;u&amp;#39; 문자가 아닌 문자가 하나 이상 나오는 모든 경우의 시작 지점과 끝 지점을 반환 &lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="c1"&gt;#&amp;gt; [[1]]&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="c1"&gt;#&amp;gt; start end&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="c1"&gt;#&amp;gt; [1,] 1 4&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="c1"&gt;#&amp;gt; [2,] 5 8&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="c1"&gt;#&amp;gt; [3,] 9 14&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="c1"&gt;#&amp;gt; [4,] 15 20&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="c1"&gt;#&amp;gt; [5,] 21 26&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;h3 id="바꾸기"&gt;바꾸기&lt;/h3&gt;
&lt;ul&gt;
&lt;li&gt; &lt;code&gt;str_replace()&lt;/code&gt;는 특정 문자 혹은 패턴(정규표현식)에 맞는 경우를 새로운 문자로 바꾸는 함수입니다.&lt;/li&gt;
&lt;/ul&gt;
&lt;div class="highlight"&gt;&lt;pre tabindex="0" class="chroma"&gt;&lt;code class="language-r" data-lang="r"&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="nf"&gt;str_replace&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;regex_sentences&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="s"&gt;&amp;#39;k&amp;#39;&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="s"&gt;&amp;#34;&amp;#39;K&amp;#39;&amp;#34;&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt; &lt;span class="c1"&gt;# 최초로 매칭되는 문자 k를 &amp;#39;K&amp;#39;로 변환 &lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="c1"&gt;#&amp;gt; [1] &amp;#34;The birch canoe slid on the smooth plan&amp;#39;K&amp;#39;s.&amp;#34; &lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="c1"&gt;#&amp;gt; [2] &amp;#34;Glue the sheet to the dar&amp;#39;K&amp;#39; blue background.&amp;#34;&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="c1"&gt;#&amp;gt; [3] &amp;#34;It&amp;#39;s easy to tell the depth of a well.&amp;#34; &lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="c1"&gt;#&amp;gt; [4] &amp;#34;These days a chic&amp;#39;K&amp;#39;en leg is a rare dish.&amp;#34; &lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="c1"&gt;#&amp;gt; [5] &amp;#34;Rice is often served in round bowls.&amp;#34; &lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="c1"&gt;#&amp;gt; [6] &amp;#34;The juice of lemons ma&amp;#39;K&amp;#39;es fine punch.&amp;#34; &lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="c1"&gt;#&amp;gt; [7] &amp;#34;The box was thrown beside the par&amp;#39;K&amp;#39;ed truck.&amp;#34;&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="c1"&gt;#&amp;gt; [8] &amp;#34;The hogs were fed chopped corn and garbage.&amp;#34; &lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="c1"&gt;#&amp;gt; [9] &amp;#34;Four hours of steady wor&amp;#39;K&amp;#39; faced us.&amp;#34; &lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="c1"&gt;#&amp;gt; [10] &amp;#34;Large size in stoc&amp;#39;K&amp;#39;ings is hard to sell.&amp;#34;&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;div class="highlight"&gt;&lt;pre tabindex="0" class="chroma"&gt;&lt;code class="language-r" data-lang="r"&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="nf"&gt;str_replace&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;regex_sentences&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="s"&gt;&amp;#39;\\.&amp;#39;&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="s"&gt;&amp;#39;\\?&amp;#39;&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt; &lt;span class="c1"&gt;# 최초로 매칭되는 마침표를 물음표로 변환 &lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="c1"&gt;#&amp;gt; [1] &amp;#34;The birch canoe slid on the smooth planks?&amp;#34; &lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="c1"&gt;#&amp;gt; [2] &amp;#34;Glue the sheet to the dark blue background?&amp;#34;&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="c1"&gt;#&amp;gt; [3] &amp;#34;It&amp;#39;s easy to tell the depth of a well?&amp;#34; &lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="c1"&gt;#&amp;gt; [4] &amp;#34;These days a chicken leg is a rare dish?&amp;#34; &lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="c1"&gt;#&amp;gt; [5] &amp;#34;Rice is often served in round bowls?&amp;#34; &lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="c1"&gt;#&amp;gt; [6] &amp;#34;The juice of lemons makes fine punch?&amp;#34; &lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="c1"&gt;#&amp;gt; [7] &amp;#34;The box was thrown beside the parked truck?&amp;#34;&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="c1"&gt;#&amp;gt; [8] &amp;#34;The hogs were fed chopped corn and garbage?&amp;#34;&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="c1"&gt;#&amp;gt; [9] &amp;#34;Four hours of steady work faced us?&amp;#34; &lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="c1"&gt;#&amp;gt; [10] &amp;#34;Large size in stockings is hard to sell?&amp;#34;&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;p&gt; 마찬가지로 &lt;code&gt;str_replace_all()&lt;/code&gt;함수를 통해 조건에 맞는 모든 값을 바꿀 수 있습니다.&lt;/p&gt;
&lt;div class="highlight"&gt;&lt;pre tabindex="0" class="chroma"&gt;&lt;code class="language-r" data-lang="r"&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="nf"&gt;str_replace&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;regex_sentences&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="s"&gt;&amp;#39;[:alpha:]{1,}&amp;#39;&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="s"&gt;&amp;#39;word&amp;#39;&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt; &lt;span class="c1"&gt;# 최초로 매칭되는 알파뱃이 한개 이상인 경우를 &amp;#39;word&amp;#39;로 변환 &lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="c1"&gt;#&amp;gt; [1] &amp;#34;word birch canoe slid on the smooth planks.&amp;#34; &lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="c1"&gt;#&amp;gt; [2] &amp;#34;word the sheet to the dark blue background.&amp;#34; &lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="c1"&gt;#&amp;gt; [3] &amp;#34;word&amp;#39;s easy to tell the depth of a well.&amp;#34; &lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="c1"&gt;#&amp;gt; [4] &amp;#34;word days a chicken leg is a rare dish.&amp;#34; &lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="c1"&gt;#&amp;gt; [5] &amp;#34;word is often served in round bowls.&amp;#34; &lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="c1"&gt;#&amp;gt; [6] &amp;#34;word juice of lemons makes fine punch.&amp;#34; &lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="c1"&gt;#&amp;gt; [7] &amp;#34;word box was thrown beside the parked truck.&amp;#34;&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="c1"&gt;#&amp;gt; [8] &amp;#34;word hogs were fed chopped corn and garbage.&amp;#34;&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="c1"&gt;#&amp;gt; [9] &amp;#34;word hours of steady work faced us.&amp;#34; &lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="c1"&gt;#&amp;gt; [10] &amp;#34;word size in stockings is hard to sell.&amp;#34;&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;div class="highlight"&gt;&lt;pre tabindex="0" class="chroma"&gt;&lt;code class="language-r" data-lang="r"&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="nf"&gt;str_replace_all&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;regex_sentences&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="s"&gt;&amp;#39;[:alpha:]{1,}&amp;#39;&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="s"&gt;&amp;#39;word&amp;#39;&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt; &lt;span class="c1"&gt;# 알파뱃이 한개 이상인 모든 값을 &amp;#39;word&amp;#39;라는 단어로 변환 &lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="c1"&gt;#&amp;gt; [1] &amp;#34;word word word word word word word word.&amp;#34; &lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="c1"&gt;#&amp;gt; [2] &amp;#34;word word word word word word word word.&amp;#34; &lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="c1"&gt;#&amp;gt; [3] &amp;#34;word&amp;#39;word word word word word word word word word.&amp;#34;&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="c1"&gt;#&amp;gt; [4] &amp;#34;word word word word word word word word word.&amp;#34; &lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="c1"&gt;#&amp;gt; [5] &amp;#34;word word word word word word word.&amp;#34; &lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="c1"&gt;#&amp;gt; [6] &amp;#34;word word word word word word word.&amp;#34; &lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="c1"&gt;#&amp;gt; [7] &amp;#34;word word word word word word word word.&amp;#34; &lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="c1"&gt;#&amp;gt; [8] &amp;#34;word word word word word word word word.&amp;#34; &lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="c1"&gt;#&amp;gt; [9] &amp;#34;word word word word word word word.&amp;#34; &lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="c1"&gt;#&amp;gt; [10] &amp;#34;word word word word word word word word.&amp;#34;&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;div class="highlight"&gt;&lt;pre tabindex="0" class="chroma"&gt;&lt;code class="language-r" data-lang="r"&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="nf"&gt;str_replace&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;regex_sentences&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="s"&gt;&amp;#39;[:space:]&amp;#39;&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="s"&gt;&amp;#39;&amp;#39;&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt; &lt;span class="c1"&gt;# 최초로 매칭되는 띄어쓰기를 공백으로 변환 &lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="c1"&gt;#&amp;gt; [1] &amp;#34;Thebirch canoe slid on the smooth planks.&amp;#34; &lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="c1"&gt;#&amp;gt; [2] &amp;#34;Gluethe sheet to the dark blue background.&amp;#34;&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="c1"&gt;#&amp;gt; [3] &amp;#34;It&amp;#39;seasy to tell the depth of a well.&amp;#34; &lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="c1"&gt;#&amp;gt; [4] &amp;#34;Thesedays a chicken leg is a rare dish.&amp;#34; &lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="c1"&gt;#&amp;gt; [5] &amp;#34;Riceis often served in round bowls.&amp;#34; &lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="c1"&gt;#&amp;gt; [6] &amp;#34;Thejuice of lemons makes fine punch.&amp;#34; &lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="c1"&gt;#&amp;gt; [7] &amp;#34;Thebox was thrown beside the parked truck.&amp;#34;&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="c1"&gt;#&amp;gt; [8] &amp;#34;Thehogs were fed chopped corn and garbage.&amp;#34;&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="c1"&gt;#&amp;gt; [9] &amp;#34;Fourhours of steady work faced us.&amp;#34; &lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="c1"&gt;#&amp;gt; [10] &amp;#34;Largesize in stockings is hard to sell.&amp;#34;&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;div class="highlight"&gt;&lt;pre tabindex="0" class="chroma"&gt;&lt;code class="language-r" data-lang="r"&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="nf"&gt;str_replace_all&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;regex_sentences&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="s"&gt;&amp;#39;[:space:]&amp;#39;&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="s"&gt;&amp;#39;&amp;#39;&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt; &lt;span class="c1"&gt;# 매칭되는 모든 띄어쓰기를 공백으로 변환 &lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="c1"&gt;#&amp;gt; [1] &amp;#34;Thebirchcanoeslidonthesmoothplanks.&amp;#34; &lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="c1"&gt;#&amp;gt; [2] &amp;#34;Gluethesheettothedarkbluebackground.&amp;#34;&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="c1"&gt;#&amp;gt; [3] &amp;#34;It&amp;#39;seasytotellthedepthofawell.&amp;#34; &lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="c1"&gt;#&amp;gt; [4] &amp;#34;Thesedaysachickenlegisararedish.&amp;#34; &lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="c1"&gt;#&amp;gt; [5] &amp;#34;Riceisoftenservedinroundbowls.&amp;#34; &lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="c1"&gt;#&amp;gt; [6] &amp;#34;Thejuiceoflemonsmakesfinepunch.&amp;#34; &lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="c1"&gt;#&amp;gt; [7] &amp;#34;Theboxwasthrownbesidetheparkedtruck.&amp;#34;&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="c1"&gt;#&amp;gt; [8] &amp;#34;Thehogswerefedchoppedcornandgarbage.&amp;#34;&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="c1"&gt;#&amp;gt; [9] &amp;#34;Fourhoursofsteadyworkfacedus.&amp;#34; &lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="c1"&gt;#&amp;gt; [10] &amp;#34;Largesizeinstockingsishardtosell.&amp;#34;&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;h3 id="나누기"&gt;나누기&lt;/h3&gt;
&lt;ul&gt;
&lt;li&gt; &lt;code&gt;str_split()&lt;/code&gt;는 특정 문자 혹은 패턴(정규표현식)을 기준으로 값을 나누는 함수입니다. 이때 기준이된 문자 혹은 패턴은 제거됩니다.&lt;/li&gt;
&lt;/ul&gt;
&lt;div class="highlight"&gt;&lt;pre tabindex="0" class="chroma"&gt;&lt;code class="language-r" data-lang="r"&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="nf"&gt;str_split&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;regex_sentences&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="s"&gt;&amp;#39;[:upper:]&amp;#39;&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt; &lt;span class="c1"&gt;# 대문자를 기준으로 분절 &lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="c1"&gt;#&amp;gt; [[1]]&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="c1"&gt;#&amp;gt; [1] &amp;#34;&amp;#34; &lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="c1"&gt;#&amp;gt; [2] &amp;#34;he birch canoe slid on the smooth planks.&amp;#34;&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="c1"&gt;#&amp;gt; &lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="c1"&gt;#&amp;gt; [[2]]&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="c1"&gt;#&amp;gt; [1] &amp;#34;&amp;#34; &lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="c1"&gt;#&amp;gt; [2] &amp;#34;lue the sheet to the dark blue background.&amp;#34;&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="c1"&gt;#&amp;gt; &lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="c1"&gt;#&amp;gt; [[3]]&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="c1"&gt;#&amp;gt; [1] &amp;#34;&amp;#34; &lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="c1"&gt;#&amp;gt; [2] &amp;#34;t&amp;#39;s easy to tell the depth of a well.&amp;#34;&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="c1"&gt;#&amp;gt; &lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="c1"&gt;#&amp;gt; [[4]]&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="c1"&gt;#&amp;gt; [1] &amp;#34;&amp;#34; &lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="c1"&gt;#&amp;gt; [2] &amp;#34;hese days a chicken leg is a rare dish.&amp;#34;&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="c1"&gt;#&amp;gt; &lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="c1"&gt;#&amp;gt; [[5]]&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="c1"&gt;#&amp;gt; [1] &amp;#34;&amp;#34; &amp;#34;ice is often served in round bowls.&amp;#34;&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="c1"&gt;#&amp;gt; &lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="c1"&gt;#&amp;gt; [[6]]&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="c1"&gt;#&amp;gt; [1] &amp;#34;&amp;#34; &lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="c1"&gt;#&amp;gt; [2] &amp;#34;he juice of lemons makes fine punch.&amp;#34;&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="c1"&gt;#&amp;gt; &lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="c1"&gt;#&amp;gt; [[7]]&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="c1"&gt;#&amp;gt; [1] &amp;#34;&amp;#34; &lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="c1"&gt;#&amp;gt; [2] &amp;#34;he box was thrown beside the parked truck.&amp;#34;&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="c1"&gt;#&amp;gt; &lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="c1"&gt;#&amp;gt; [[8]]&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="c1"&gt;#&amp;gt; [1] &amp;#34;&amp;#34; &lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="c1"&gt;#&amp;gt; [2] &amp;#34;he hogs were fed chopped corn and garbage.&amp;#34;&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="c1"&gt;#&amp;gt; &lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="c1"&gt;#&amp;gt; [[9]]&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="c1"&gt;#&amp;gt; [1] &amp;#34;&amp;#34; &amp;#34;our hours of steady work faced us.&amp;#34;&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="c1"&gt;#&amp;gt; &lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="c1"&gt;#&amp;gt; [[10]]&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="c1"&gt;#&amp;gt; [1] &amp;#34;&amp;#34; &lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="c1"&gt;#&amp;gt; [2] &amp;#34;arge size in stockings is hard to sell.&amp;#34;&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;div class="highlight"&gt;&lt;pre tabindex="0" class="chroma"&gt;&lt;code class="language-r" data-lang="r"&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="nf"&gt;str_split&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;regex_sentences&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="s"&gt;&amp;#39;\\b&amp;#39;&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt; &lt;span class="c1"&gt;# 문자의 바운더리를 기준으로 분절 &lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="c1"&gt;#&amp;gt; [[1]]&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="c1"&gt;#&amp;gt; [1] &amp;#34;&amp;#34; &amp;#34;The&amp;#34; &amp;#34; &amp;#34; &amp;#34;birch&amp;#34; &amp;#34; &amp;#34; &amp;#34;canoe&amp;#34; &amp;#34; &amp;#34; &amp;#34;slid&amp;#34; &lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="c1"&gt;#&amp;gt; [9] &amp;#34; &amp;#34; &amp;#34;on&amp;#34; &amp;#34; &amp;#34; &amp;#34;the&amp;#34; &amp;#34; &amp;#34; &amp;#34;smooth&amp;#34; &amp;#34; &amp;#34; &amp;#34;planks&amp;#34;&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="c1"&gt;#&amp;gt; [17] &amp;#34;.&amp;#34; &lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="c1"&gt;#&amp;gt; &lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="c1"&gt;#&amp;gt; [[2]]&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="c1"&gt;#&amp;gt; [1] &amp;#34;&amp;#34; &amp;#34;Glue&amp;#34; &amp;#34; &amp;#34; &amp;#34;the&amp;#34; &amp;#34; &amp;#34; &lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="c1"&gt;#&amp;gt; [6] &amp;#34;sheet&amp;#34; &amp;#34; &amp;#34; &amp;#34;to&amp;#34; &amp;#34; &amp;#34; &amp;#34;the&amp;#34; &lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="c1"&gt;#&amp;gt; [11] &amp;#34; &amp;#34; &amp;#34;dark&amp;#34; &amp;#34; &amp;#34; &amp;#34;blue&amp;#34; &amp;#34; &amp;#34; &lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="c1"&gt;#&amp;gt; [16] &amp;#34;background&amp;#34; &amp;#34;.&amp;#34; &lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="c1"&gt;#&amp;gt; &lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="c1"&gt;#&amp;gt; [[3]]&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="c1"&gt;#&amp;gt; [1] &amp;#34;&amp;#34; &amp;#34;It&amp;#34; &amp;#34;&amp;#39;&amp;#34; &amp;#34;s&amp;#34; &amp;#34; &amp;#34; &amp;#34;easy&amp;#34; &amp;#34; &amp;#34; &amp;#34;to&amp;#34; &amp;#34; &amp;#34; &lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="c1"&gt;#&amp;gt; [10] &amp;#34;tell&amp;#34; &amp;#34; &amp;#34; &amp;#34;the&amp;#34; &amp;#34; &amp;#34; &amp;#34;depth&amp;#34; &amp;#34; &amp;#34; &amp;#34;of&amp;#34; &amp;#34; &amp;#34; &amp;#34;a&amp;#34; &lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="c1"&gt;#&amp;gt; [19] &amp;#34; &amp;#34; &amp;#34;well&amp;#34; &amp;#34;.&amp;#34; &lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="c1"&gt;#&amp;gt; &lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="c1"&gt;#&amp;gt; [[4]]&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="c1"&gt;#&amp;gt; [1] &amp;#34;&amp;#34; &amp;#34;These&amp;#34; &amp;#34; &amp;#34; &amp;#34;days&amp;#34; &amp;#34; &amp;#34; &amp;#34;a&amp;#34; &amp;#34; &amp;#34; &lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="c1"&gt;#&amp;gt; [8] &amp;#34;chicken&amp;#34; &amp;#34; &amp;#34; &amp;#34;leg&amp;#34; &amp;#34; &amp;#34; &amp;#34;is&amp;#34; &amp;#34; &amp;#34; &amp;#34;a&amp;#34; &lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="c1"&gt;#&amp;gt; [15] &amp;#34; &amp;#34; &amp;#34;rare&amp;#34; &amp;#34; &amp;#34; &amp;#34;dish&amp;#34; &amp;#34;.&amp;#34; &lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="c1"&gt;#&amp;gt; &lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="c1"&gt;#&amp;gt; [[5]]&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="c1"&gt;#&amp;gt; [1] &amp;#34;&amp;#34; &amp;#34;Rice&amp;#34; &amp;#34; &amp;#34; &amp;#34;is&amp;#34; &amp;#34; &amp;#34; &amp;#34;often&amp;#34; &amp;#34; &amp;#34; &amp;#34;served&amp;#34;&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="c1"&gt;#&amp;gt; [9] &amp;#34; &amp;#34; &amp;#34;in&amp;#34; &amp;#34; &amp;#34; &amp;#34;round&amp;#34; &amp;#34; &amp;#34; &amp;#34;bowls&amp;#34; &amp;#34;.&amp;#34; &lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="c1"&gt;#&amp;gt; &lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="c1"&gt;#&amp;gt; [[6]]&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="c1"&gt;#&amp;gt; [1] &amp;#34;&amp;#34; &amp;#34;The&amp;#34; &amp;#34; &amp;#34; &amp;#34;juice&amp;#34; &amp;#34; &amp;#34; &amp;#34;of&amp;#34; &amp;#34; &amp;#34; &amp;#34;lemons&amp;#34;&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="c1"&gt;#&amp;gt; [9] &amp;#34; &amp;#34; &amp;#34;makes&amp;#34; &amp;#34; &amp;#34; &amp;#34;fine&amp;#34; &amp;#34; &amp;#34; &amp;#34;punch&amp;#34; &amp;#34;.&amp;#34; &lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="c1"&gt;#&amp;gt; &lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="c1"&gt;#&amp;gt; [[7]]&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="c1"&gt;#&amp;gt; [1] &amp;#34;&amp;#34; &amp;#34;The&amp;#34; &amp;#34; &amp;#34; &amp;#34;box&amp;#34; &amp;#34; &amp;#34; &amp;#34;was&amp;#34; &amp;#34; &amp;#34; &amp;#34;thrown&amp;#34;&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="c1"&gt;#&amp;gt; [9] &amp;#34; &amp;#34; &amp;#34;beside&amp;#34; &amp;#34; &amp;#34; &amp;#34;the&amp;#34; &amp;#34; &amp;#34; &amp;#34;parked&amp;#34; &amp;#34; &amp;#34; &amp;#34;truck&amp;#34; &lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="c1"&gt;#&amp;gt; [17] &amp;#34;.&amp;#34; &lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="c1"&gt;#&amp;gt; &lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="c1"&gt;#&amp;gt; [[8]]&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="c1"&gt;#&amp;gt; [1] &amp;#34;&amp;#34; &amp;#34;The&amp;#34; &amp;#34; &amp;#34; &amp;#34;hogs&amp;#34; &amp;#34; &amp;#34; &amp;#34;were&amp;#34; &amp;#34; &amp;#34; &lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="c1"&gt;#&amp;gt; [8] &amp;#34;fed&amp;#34; &amp;#34; &amp;#34; &amp;#34;chopped&amp;#34; &amp;#34; &amp;#34; &amp;#34;corn&amp;#34; &amp;#34; &amp;#34; &amp;#34;and&amp;#34; &lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="c1"&gt;#&amp;gt; [15] &amp;#34; &amp;#34; &amp;#34;garbage&amp;#34; &amp;#34;.&amp;#34; &lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="c1"&gt;#&amp;gt; &lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="c1"&gt;#&amp;gt; [[9]]&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="c1"&gt;#&amp;gt; [1] &amp;#34;&amp;#34; &amp;#34;Four&amp;#34; &amp;#34; &amp;#34; &amp;#34;hours&amp;#34; &amp;#34; &amp;#34; &amp;#34;of&amp;#34; &amp;#34; &amp;#34; &amp;#34;steady&amp;#34;&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="c1"&gt;#&amp;gt; [9] &amp;#34; &amp;#34; &amp;#34;work&amp;#34; &amp;#34; &amp;#34; &amp;#34;faced&amp;#34; &amp;#34; &amp;#34; &amp;#34;us&amp;#34; &amp;#34;.&amp;#34; &lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="c1"&gt;#&amp;gt; &lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="c1"&gt;#&amp;gt; [[10]]&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="c1"&gt;#&amp;gt; [1] &amp;#34;&amp;#34; &amp;#34;Large&amp;#34; &amp;#34; &amp;#34; &amp;#34;size&amp;#34; &amp;#34; &amp;#34; &amp;#34;in&amp;#34; &lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="c1"&gt;#&amp;gt; [7] &amp;#34; &amp;#34; &amp;#34;stockings&amp;#34; &amp;#34; &amp;#34; &amp;#34;is&amp;#34; &amp;#34; &amp;#34; &amp;#34;hard&amp;#34; &lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="c1"&gt;#&amp;gt; [13] &amp;#34; &amp;#34; &amp;#34;to&amp;#34; &amp;#34; &amp;#34; &amp;#34;sell&amp;#34; &amp;#34;.&amp;#34;&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;div class="highlight"&gt;&lt;pre tabindex="0" class="chroma"&gt;&lt;code class="language-r" data-lang="r"&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="nf"&gt;str_split&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;regex_sentences&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="s"&gt;&amp;#39;\\s&amp;#39;&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt; &lt;span class="c1"&gt;# 띄어쓰기를 기준으로 분절 &lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="c1"&gt;#&amp;gt; [[1]]&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="c1"&gt;#&amp;gt; [1] &amp;#34;The&amp;#34; &amp;#34;birch&amp;#34; &amp;#34;canoe&amp;#34; &amp;#34;slid&amp;#34; &amp;#34;on&amp;#34; &amp;#34;the&amp;#34; &amp;#34;smooth&amp;#34; &lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="c1"&gt;#&amp;gt; [8] &amp;#34;planks.&amp;#34;&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="c1"&gt;#&amp;gt; &lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="c1"&gt;#&amp;gt; [[2]]&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="c1"&gt;#&amp;gt; [1] &amp;#34;Glue&amp;#34; &amp;#34;the&amp;#34; &amp;#34;sheet&amp;#34; &amp;#34;to&amp;#34; &amp;#34;the&amp;#34; &lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="c1"&gt;#&amp;gt; [6] &amp;#34;dark&amp;#34; &amp;#34;blue&amp;#34; &amp;#34;background.&amp;#34;&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="c1"&gt;#&amp;gt; &lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="c1"&gt;#&amp;gt; [[3]]&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="c1"&gt;#&amp;gt; [1] &amp;#34;It&amp;#39;s&amp;#34; &amp;#34;easy&amp;#34; &amp;#34;to&amp;#34; &amp;#34;tell&amp;#34; &amp;#34;the&amp;#34; &amp;#34;depth&amp;#34; &amp;#34;of&amp;#34; &amp;#34;a&amp;#34; &amp;#34;well.&amp;#34;&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="c1"&gt;#&amp;gt; &lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="c1"&gt;#&amp;gt; [[4]]&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="c1"&gt;#&amp;gt; [1] &amp;#34;These&amp;#34; &amp;#34;days&amp;#34; &amp;#34;a&amp;#34; &amp;#34;chicken&amp;#34; &amp;#34;leg&amp;#34; &amp;#34;is&amp;#34; &amp;#34;a&amp;#34; &lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="c1"&gt;#&amp;gt; [8] &amp;#34;rare&amp;#34; &amp;#34;dish.&amp;#34; &lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="c1"&gt;#&amp;gt; &lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="c1"&gt;#&amp;gt; [[5]]&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="c1"&gt;#&amp;gt; [1] &amp;#34;Rice&amp;#34; &amp;#34;is&amp;#34; &amp;#34;often&amp;#34; &amp;#34;served&amp;#34; &amp;#34;in&amp;#34; &amp;#34;round&amp;#34; &amp;#34;bowls.&amp;#34;&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="c1"&gt;#&amp;gt; &lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="c1"&gt;#&amp;gt; [[6]]&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="c1"&gt;#&amp;gt; [1] &amp;#34;The&amp;#34; &amp;#34;juice&amp;#34; &amp;#34;of&amp;#34; &amp;#34;lemons&amp;#34; &amp;#34;makes&amp;#34; &amp;#34;fine&amp;#34; &amp;#34;punch.&amp;#34;&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="c1"&gt;#&amp;gt; &lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="c1"&gt;#&amp;gt; [[7]]&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="c1"&gt;#&amp;gt; [1] &amp;#34;The&amp;#34; &amp;#34;box&amp;#34; &amp;#34;was&amp;#34; &amp;#34;thrown&amp;#34; &amp;#34;beside&amp;#34; &amp;#34;the&amp;#34; &amp;#34;parked&amp;#34; &amp;#34;truck.&amp;#34;&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="c1"&gt;#&amp;gt; &lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="c1"&gt;#&amp;gt; [[8]]&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="c1"&gt;#&amp;gt; [1] &amp;#34;The&amp;#34; &amp;#34;hogs&amp;#34; &amp;#34;were&amp;#34; &amp;#34;fed&amp;#34; &amp;#34;chopped&amp;#34; &amp;#34;corn&amp;#34; &amp;#34;and&amp;#34; &lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="c1"&gt;#&amp;gt; [8] &amp;#34;garbage.&amp;#34;&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="c1"&gt;#&amp;gt; &lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="c1"&gt;#&amp;gt; [[9]]&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="c1"&gt;#&amp;gt; [1] &amp;#34;Four&amp;#34; &amp;#34;hours&amp;#34; &amp;#34;of&amp;#34; &amp;#34;steady&amp;#34; &amp;#34;work&amp;#34; &amp;#34;faced&amp;#34; &amp;#34;us.&amp;#34; &lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="c1"&gt;#&amp;gt; &lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="c1"&gt;#&amp;gt; [[10]]&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="c1"&gt;#&amp;gt; [1] &amp;#34;Large&amp;#34; &amp;#34;size&amp;#34; &amp;#34;in&amp;#34; &amp;#34;stockings&amp;#34; &amp;#34;is&amp;#34; &amp;#34;hard&amp;#34; &lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="c1"&gt;#&amp;gt; [7] &amp;#34;to&amp;#34; &amp;#34;sell.&amp;#34;&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;hr&gt;
&lt;h1 id="참고자료"&gt;참고자료&lt;/h1&gt;
&lt;ul&gt;
&lt;li&gt;
&lt;p&gt;
&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;
&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;
&lt;/p&gt;
&lt;/li&gt;
&lt;/ul&gt;</description></item><item><title>[R] 정규표현식 활용한 텍스트 데이터 다루기</title><link>https://www.jdwblog.com/post/regex/</link><pubDate>Fri, 02 Oct 2020 00:00:00 +0000</pubDate><guid>https://www.jdwblog.com/post/regex/</guid><description>&lt;script src="index_files/htmlwidgets/htmlwidgets.js"&gt;&lt;/script&gt;
&lt;link href="index_files/str_view/str_view.css" rel="stylesheet" /&gt;
&lt;script src="index_files/str_view-binding/str_view.js"&gt;&lt;/script&gt;
&lt;script src="index_files/kePrint/kePrint.js"&gt;&lt;/script&gt;
&lt;link href="index_files/lightable/lightable.css" rel="stylesheet" /&gt;
&lt;p&gt;
&lt;figure &gt;
&lt;div class="flex justify-center "&gt;
&lt;div class="w-full" &gt;&lt;img alt=""
src="https://www.jdwblog.com/post/regex/images/regular-expression.gif"
loading="lazy" data-zoomable /&gt;&lt;/div&gt;
&lt;/div&gt;&lt;/figure&gt;
&lt;/p&gt;
&lt;p&gt; 문자형 데이터를 다루는데는 수 많은 기법들이 있습니다. R에서 제공하는 기본 함수들을 통해 처리하기도 하고, 텍스트처리에 특화된 패키지함수를 사용하여 원하는 처리를 할 수 있는데요. 오늘은 그 중에 텍스트데이터를 다루는데 효과적으로 사용되는 &lt;strong&gt;정규표현식&lt;/strong&gt;을 사용하는 법에 대해 알아보도록 하겠습니다.&lt;/p&gt;
&lt;h1 id="정규표현식"&gt;정규표현식&lt;/h1&gt;
&lt;p&gt; &lt;strong&gt;정규표현식&lt;/strong&gt;(regular expression)은 특정한 규칙을 가진 문자열의 집합을 표현하는데 사용하는 형식 언어입니다.
프로그래밍에서 조건문과 반복문을 통해 원하는 결과값을 도출해내는 것처럼, 텍스트데이터에서 조건과 패턴에 맞는 문자열을 찾거나 추출할때 정규식을 사용합니다. 정규표현식에는 특별한 의미를 지니고 있는 &lt;em&gt;메타문자&lt;/em&gt; 와 문자 그대로의 의미를 지닌 &lt;em&gt;일반문자&lt;/em&gt; 로 구성되어 있습니다.&lt;/p&gt;
&lt;h2 id="메타문자"&gt;메타문자&lt;/h2&gt;
&lt;p&gt; 메타문자는 정규표현식에서 특별한 의미를 갖는 문자 기호입니다. 키보드에서 알파벳과 숫자를 제외한 특수 기호중에서 미리 정의한 기능을 가진 기호들을 메타문자라고 합니다. ! + \ &amp;amp; ^ [] ~ 등의 문자들이 메타 문자이며 이들은 각각 부여받은 기능들이 있어 이를 조합하여 특정한 패턴을 정의하는 방식으로 사용됩니다.&lt;/p&gt;
&lt;p&gt; 이해를 돕기위해 예시와 함께 살펴보도록 하겠습니다.&lt;/p&gt;
&lt;h3 id="정규표현식-사용자-함수-생성"&gt;정규표현식 사용자 함수 생성&lt;/h3&gt;
&lt;p&gt;  R Studio의 &lt;strong&gt;&lt;code&gt;stringr&lt;/code&gt;&lt;/strong&gt; 패키지 Cheat Sheet에 좋은 예시함수가 있어서 이를 차용하였습니다. 정규표현식 조건에 맞는 문자는 음영처리되어 보여집니다.&lt;/p&gt;
&lt;div class="highlight"&gt;&lt;pre tabindex="0" class="chroma"&gt;&lt;code class="language-r" data-lang="r"&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="n"&gt;see&lt;/span&gt; &lt;span class="o"&gt;&amp;lt;-&lt;/span&gt; &lt;span class="kr"&gt;function&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;rx&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt; &lt;span class="nf"&gt;str_view_all&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="s"&gt;&amp;#34;abc ABC 123\t.!?\\(){}\n abcde aaa bacad .a.aa.aaa abbaab ababcbabcdcbabcde&amp;#34;&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="n"&gt;rx&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;h3 id="heading"&gt;“^”&lt;/h3&gt;
&lt;p&gt; &lt;strong&gt;^&lt;/strong&gt;(윗꺽쇠)는 문자열의 시작지점을 의미합니다.&lt;/p&gt;
&lt;div class="highlight"&gt;&lt;pre tabindex="0" class="chroma"&gt;&lt;code class="language-r" data-lang="r"&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="nf"&gt;see&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="s"&gt;&amp;#39;^&amp;#39;&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt; &lt;span class="c1"&gt;# 문자열의 시작지점을 매칭 &lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;div id="htmlwidget-1" style="width:960px;height:100%;" class="str_view html-widget"&gt;&lt;/div&gt;
&lt;script type="application/json" data-for="htmlwidget-1"&gt;{"x":{"html":"&lt;ul&gt;\n &lt;li&gt;&lt;span class='match'&gt;&lt;\/span&gt;abc ABC 123\t.!?\\(){}\n abcde aaa bacad .a.aa.aaa abbaab ababcbabcdcbabcde&lt;\/li&gt;\n&lt;\/ul&gt;"},"evals":[],"jsHooks":[]}&lt;/script&gt;
&lt;h3 id="heading-1"&gt;“$”&lt;/h3&gt;
&lt;p&gt; &lt;strong&gt;$&lt;/strong&gt;(달러표시)는 문자열의 끝 또는 문서의 끝을 의미합니다.&lt;/p&gt;
&lt;div class="highlight"&gt;&lt;pre tabindex="0" class="chroma"&gt;&lt;code class="language-r" data-lang="r"&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="nf"&gt;see&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="s"&gt;&amp;#39;$&amp;#39;&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt; &lt;span class="c1"&gt;# 문자열의 끝지점을 매칭 &lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;div id="htmlwidget-2" style="width:960px;height:100%;" class="str_view html-widget"&gt;&lt;/div&gt;
&lt;script type="application/json" data-for="htmlwidget-2"&gt;{"x":{"html":"&lt;ul&gt;\n &lt;li&gt;abc ABC 123\t.!?\\(){}\n abcde aaa bacad .a.aa.aaa abbaab ababcbabcdcbabcde&lt;span class='match'&gt;&lt;\/span&gt;&lt;\/li&gt;\n&lt;\/ul&gt;"},"evals":[],"jsHooks":[]}&lt;/script&gt;
&lt;h3 id="heading-2"&gt;“.”&lt;/h3&gt;
&lt;p&gt; &lt;strong&gt;.&lt;/strong&gt;(마침표)는 임의의 한 글자를 의미합니다.&lt;/p&gt;
&lt;div class="highlight"&gt;&lt;pre tabindex="0" class="chroma"&gt;&lt;code class="language-r" data-lang="r"&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="nf"&gt;see&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="s"&gt;&amp;#39;.&amp;#39;&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt; &lt;span class="c1"&gt;# 임의의 글자를 매칭 &lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;div id="htmlwidget-3" style="width:960px;height:100%;" class="str_view html-widget"&gt;&lt;/div&gt;
&lt;script type="application/json" data-for="htmlwidget-3"&gt;{"x":{"html":"&lt;ul&gt;\n &lt;li&gt;&lt;span class='match'&gt;a&lt;\/span&gt;&lt;span class='match'&gt;b&lt;\/span&gt;&lt;span class='match'&gt;c&lt;\/span&gt;&lt;span class='match'&gt; &lt;\/span&gt;&lt;span class='match'&gt;A&lt;\/span&gt;&lt;span class='match'&gt;B&lt;\/span&gt;&lt;span class='match'&gt;C&lt;\/span&gt;&lt;span class='match'&gt; &lt;\/span&gt;&lt;span class='match'&gt;1&lt;\/span&gt;&lt;span class='match'&gt;2&lt;\/span&gt;&lt;span class='match'&gt;3&lt;\/span&gt;&lt;span class='match'&gt;\t&lt;\/span&gt;&lt;span class='match'&gt;.&lt;\/span&gt;&lt;span class='match'&gt;!&lt;\/span&gt;&lt;span class='match'&gt;?&lt;\/span&gt;&lt;span class='match'&gt;\\&lt;\/span&gt;&lt;span class='match'&gt;(&lt;\/span&gt;&lt;span class='match'&gt;)&lt;\/span&gt;&lt;span class='match'&gt;{&lt;\/span&gt;&lt;span class='match'&gt;}&lt;\/span&gt;\n&lt;span class='match'&gt; &lt;\/span&gt;&lt;span class='match'&gt;a&lt;\/span&gt;&lt;span class='match'&gt;b&lt;\/span&gt;&lt;span class='match'&gt;c&lt;\/span&gt;&lt;span class='match'&gt;d&lt;\/span&gt;&lt;span class='match'&gt;e&lt;\/span&gt;&lt;span class='match'&gt; &lt;\/span&gt;&lt;span class='match'&gt;a&lt;\/span&gt;&lt;span class='match'&gt;a&lt;\/span&gt;&lt;span class='match'&gt;a&lt;\/span&gt;&lt;span class='match'&gt; &lt;\/span&gt;&lt;span class='match'&gt;b&lt;\/span&gt;&lt;span class='match'&gt;a&lt;\/span&gt;&lt;span class='match'&gt;c&lt;\/span&gt;&lt;span class='match'&gt;a&lt;\/span&gt;&lt;span class='match'&gt;d&lt;\/span&gt;&lt;span class='match'&gt; &lt;\/span&gt;&lt;span class='match'&gt;.&lt;\/span&gt;&lt;span class='match'&gt;a&lt;\/span&gt;&lt;span class='match'&gt;.&lt;\/span&gt;&lt;span class='match'&gt;a&lt;\/span&gt;&lt;span class='match'&gt;a&lt;\/span&gt;&lt;span class='match'&gt;.&lt;\/span&gt;&lt;span class='match'&gt;a&lt;\/span&gt;&lt;span class='match'&gt;a&lt;\/span&gt;&lt;span class='match'&gt;a&lt;\/span&gt;&lt;span class='match'&gt; &lt;\/span&gt;&lt;span class='match'&gt;a&lt;\/span&gt;&lt;span class='match'&gt;b&lt;\/span&gt;&lt;span class='match'&gt;b&lt;\/span&gt;&lt;span class='match'&gt;a&lt;\/span&gt;&lt;span class='match'&gt;a&lt;\/span&gt;&lt;span class='match'&gt;b&lt;\/span&gt;&lt;span class='match'&gt; &lt;\/span&gt;&lt;span class='match'&gt;a&lt;\/span&gt;&lt;span class='match'&gt;b&lt;\/span&gt;&lt;span class='match'&gt;a&lt;\/span&gt;&lt;span class='match'&gt;b&lt;\/span&gt;&lt;span class='match'&gt;c&lt;\/span&gt;&lt;span class='match'&gt;b&lt;\/span&gt;&lt;span class='match'&gt;a&lt;\/span&gt;&lt;span class='match'&gt;b&lt;\/span&gt;&lt;span class='match'&gt;c&lt;\/span&gt;&lt;span class='match'&gt;d&lt;\/span&gt;&lt;span class='match'&gt;c&lt;\/span&gt;&lt;span class='match'&gt;b&lt;\/span&gt;&lt;span class='match'&gt;a&lt;\/span&gt;&lt;span class='match'&gt;b&lt;\/span&gt;&lt;span class='match'&gt;c&lt;\/span&gt;&lt;span class='match'&gt;d&lt;\/span&gt;&lt;span class='match'&gt;e&lt;\/span&gt;&lt;\/li&gt;\n&lt;\/ul&gt;"},"evals":[],"jsHooks":[]}&lt;/script&gt;
&lt;p&gt; 다른 규칙없이 마침표만을 단독으로 사용하니 임의의 모든 글자가 선택되었습니다.&lt;/p&gt;
&lt;h3 id="heading-3"&gt;“?”&lt;/h3&gt;
&lt;p&gt;  &lt;strong&gt;?&lt;/strong&gt;(물음표)는 앞에 지정된 문자가 없거나 하나가 있음을 의미합니다.&lt;/p&gt;
&lt;div class="highlight"&gt;&lt;pre tabindex="0" class="chroma"&gt;&lt;code class="language-r" data-lang="r"&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="nf"&gt;see&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="s"&gt;&amp;#39;?&amp;#39;&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;pre&gt;&lt;code&gt;#&amp;gt; Error in stri_locate_all_regex(string, pattern, omit_no_match = TRUE, : Syntax error in regexp pattern. (U_REGEX_RULE_SYNTAX, context=`?`)
&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt; 물음표를 단독으로 사용하니 에러가 발생하였습니다. 이는 물음표 조건에 맞지 않기 때문입니다. ‘ab?c’(a와 c 사이에 b가 하나 있거나 아니면 아예 없거나) 조건으로 설정해보겠습니다.&lt;/p&gt;
&lt;div class="highlight"&gt;&lt;pre tabindex="0" class="chroma"&gt;&lt;code class="language-r" data-lang="r"&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="nf"&gt;see&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="s"&gt;&amp;#39;ab?c&amp;#39;&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt; &lt;span class="c1"&gt;# &amp;#39;a&amp;#39;와 &amp;#39;c&amp;#39; 사이에 &amp;#39;b&amp;#39;가 하나 있거나 혹은 아예 없는 경우 (&amp;#39;abc&amp;#39; or &amp;#39;ac&amp;#39;)&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;div id="htmlwidget-4" style="width:960px;height:100%;" class="str_view html-widget"&gt;&lt;/div&gt;
&lt;script type="application/json" data-for="htmlwidget-4"&gt;{"x":{"html":"&lt;ul&gt;\n &lt;li&gt;&lt;span class='match'&gt;abc&lt;\/span&gt; ABC 123\t.!?\\(){}\n &lt;span class='match'&gt;abc&lt;\/span&gt;de aaa b&lt;span class='match'&gt;ac&lt;\/span&gt;ad .a.aa.aaa abbaab ab&lt;span class='match'&gt;abc&lt;\/span&gt;b&lt;span class='match'&gt;abc&lt;\/span&gt;dcb&lt;span class='match'&gt;abc&lt;\/span&gt;de&lt;\/li&gt;\n&lt;\/ul&gt;"},"evals":[],"jsHooks":[]}&lt;/script&gt;
&lt;p&gt; 정규표현식은 대소문자를 구분하기 때문에 소문자 ’abc’와 ’ac’가 선택된 것을 볼 수 있습니다. 정규표현식의 규칙은 매우 엄격하게 지켜지기 때문에 정규표현을 사용할 때는 정확한 규칙을 만들어서 사용할 필요가 있습니다.&lt;/p&gt;
&lt;h3 id="heading-4"&gt;“|”&lt;/h3&gt;
&lt;p&gt; &lt;strong&gt;|&lt;/strong&gt;(또는)은 의미 그대로 또는을 의미합니다. &lt;strong&gt;|&lt;/strong&gt; 기호를 기준으로 좌우에 해당하는 문자들을 찾습니다.&lt;/p&gt;
&lt;div class="highlight"&gt;&lt;pre tabindex="0" class="chroma"&gt;&lt;code class="language-r" data-lang="r"&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="nf"&gt;see&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="s"&gt;&amp;#39;a|c&amp;#39;&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt; &lt;span class="c1"&gt;# &amp;#39;a&amp;#39; 또는 &amp;#39;c&amp;#39;를 찾아냄&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;div id="htmlwidget-5" style="width:960px;height:100%;" class="str_view html-widget"&gt;&lt;/div&gt;
&lt;script type="application/json" data-for="htmlwidget-5"&gt;{"x":{"html":"&lt;ul&gt;\n &lt;li&gt;&lt;span class='match'&gt;a&lt;\/span&gt;b&lt;span class='match'&gt;c&lt;\/span&gt; ABC 123\t.!?\\(){}\n &lt;span class='match'&gt;a&lt;\/span&gt;b&lt;span class='match'&gt;c&lt;\/span&gt;de &lt;span class='match'&gt;a&lt;\/span&gt;&lt;span class='match'&gt;a&lt;\/span&gt;&lt;span class='match'&gt;a&lt;\/span&gt; b&lt;span class='match'&gt;a&lt;\/span&gt;&lt;span class='match'&gt;c&lt;\/span&gt;&lt;span class='match'&gt;a&lt;\/span&gt;d .&lt;span class='match'&gt;a&lt;\/span&gt;.&lt;span class='match'&gt;a&lt;\/span&gt;&lt;span class='match'&gt;a&lt;\/span&gt;.&lt;span class='match'&gt;a&lt;\/span&gt;&lt;span class='match'&gt;a&lt;\/span&gt;&lt;span class='match'&gt;a&lt;\/span&gt; &lt;span class='match'&gt;a&lt;\/span&gt;bb&lt;span class='match'&gt;a&lt;\/span&gt;&lt;span class='match'&gt;a&lt;\/span&gt;b &lt;span class='match'&gt;a&lt;\/span&gt;b&lt;span class='match'&gt;a&lt;\/span&gt;b&lt;span class='match'&gt;c&lt;\/span&gt;b&lt;span class='match'&gt;a&lt;\/span&gt;b&lt;span class='match'&gt;c&lt;\/span&gt;d&lt;span class='match'&gt;c&lt;\/span&gt;b&lt;span class='match'&gt;a&lt;\/span&gt;b&lt;span class='match'&gt;c&lt;\/span&gt;de&lt;\/li&gt;\n&lt;\/ul&gt;"},"evals":[],"jsHooks":[]}&lt;/script&gt;
&lt;h3 id="heading-5"&gt;“+”&lt;/h3&gt;
&lt;p&gt; &lt;strong&gt;+&lt;/strong&gt;(더하기)는 앞 문자가 &lt;strong&gt;1개이상&lt;/strong&gt;인 경우를 의미합니다. &lt;strong&gt;+&lt;/strong&gt; 기호의 좌측 문자를 기준으로 찾습니다.&lt;/p&gt;
&lt;div class="highlight"&gt;&lt;pre tabindex="0" class="chroma"&gt;&lt;code class="language-r" data-lang="r"&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="nf"&gt;see&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="s"&gt;&amp;#39;a+&amp;#39;&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt; &lt;span class="c1"&gt;# &amp;#39;a&amp;#39; 글자가 한 개 이상 존재하는 경우 &lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;div id="htmlwidget-6" style="width:960px;height:100%;" class="str_view html-widget"&gt;&lt;/div&gt;
&lt;script type="application/json" data-for="htmlwidget-6"&gt;{"x":{"html":"&lt;ul&gt;\n &lt;li&gt;&lt;span class='match'&gt;a&lt;\/span&gt;bc ABC 123\t.!?\\(){}\n &lt;span class='match'&gt;a&lt;\/span&gt;bcde &lt;span class='match'&gt;aaa&lt;\/span&gt; b&lt;span class='match'&gt;a&lt;\/span&gt;c&lt;span class='match'&gt;a&lt;\/span&gt;d .&lt;span class='match'&gt;a&lt;\/span&gt;.&lt;span class='match'&gt;aa&lt;\/span&gt;.&lt;span class='match'&gt;aaa&lt;\/span&gt; &lt;span class='match'&gt;a&lt;\/span&gt;bb&lt;span class='match'&gt;aa&lt;\/span&gt;b &lt;span class='match'&gt;a&lt;\/span&gt;b&lt;span class='match'&gt;a&lt;\/span&gt;bcb&lt;span class='match'&gt;a&lt;\/span&gt;bcdcb&lt;span class='match'&gt;a&lt;\/span&gt;bcde&lt;\/li&gt;\n&lt;\/ul&gt;"},"evals":[],"jsHooks":[]}&lt;/script&gt;
&lt;div class="highlight"&gt;&lt;pre tabindex="0" class="chroma"&gt;&lt;code class="language-r" data-lang="r"&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="nf"&gt;see&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="s"&gt;&amp;#39;ac+&amp;#39;&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt; &lt;span class="c1"&gt;# &amp;#39;a&amp;#39; 다음에 &amp;#39;c&amp;#39;가 하나 이상 있음 &lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;div id="htmlwidget-7" style="width:960px;height:100%;" class="str_view html-widget"&gt;&lt;/div&gt;
&lt;script type="application/json" data-for="htmlwidget-7"&gt;{"x":{"html":"&lt;ul&gt;\n &lt;li&gt;abc ABC 123\t.!?\\(){}\n abcde aaa b&lt;span class='match'&gt;ac&lt;\/span&gt;ad .a.aa.aaa abbaab ababcbabcdcbabcde&lt;\/li&gt;\n&lt;\/ul&gt;"},"evals":[],"jsHooks":[]}&lt;/script&gt;
&lt;h3 id="heading-6"&gt;&amp;ldquo;*&amp;rdquo;&lt;/h3&gt;
&lt;p&gt;  &lt;strong&gt;*&lt;/strong&gt;(곱하기)는 앞 문자가 &lt;strong&gt;0개이상&lt;/strong&gt; 인 경우를 의미합니다.&lt;/p&gt;
&lt;div class="highlight"&gt;&lt;pre tabindex="0" class="chroma"&gt;&lt;code class="language-r" data-lang="r"&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="nf"&gt;see&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="s"&gt;&amp;#39;a*&amp;#39;&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt; &lt;span class="c1"&gt;# &amp;#39;a&amp;#39; 글자를 반환 &lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;div id="htmlwidget-8" style="width:960px;height:100%;" class="str_view html-widget"&gt;&lt;/div&gt;
&lt;script type="application/json" data-for="htmlwidget-8"&gt;{"x":{"html":"&lt;ul&gt;\n &lt;li&gt;&lt;span class='match'&gt;a&lt;\/span&gt;&lt;span class='match'&gt;&lt;\/span&gt;b&lt;span class='match'&gt;&lt;\/span&gt;c&lt;span class='match'&gt;&lt;\/span&gt; &lt;span class='match'&gt;&lt;\/span&gt;A&lt;span class='match'&gt;&lt;\/span&gt;B&lt;span class='match'&gt;&lt;\/span&gt;C&lt;span class='match'&gt;&lt;\/span&gt; &lt;span class='match'&gt;&lt;\/span&gt;1&lt;span class='match'&gt;&lt;\/span&gt;2&lt;span class='match'&gt;&lt;\/span&gt;3&lt;span class='match'&gt;&lt;\/span&gt;\t&lt;span class='match'&gt;&lt;\/span&gt;.&lt;span class='match'&gt;&lt;\/span&gt;!&lt;span class='match'&gt;&lt;\/span&gt;?&lt;span class='match'&gt;&lt;\/span&gt;\\&lt;span class='match'&gt;&lt;\/span&gt;(&lt;span class='match'&gt;&lt;\/span&gt;)&lt;span class='match'&gt;&lt;\/span&gt;{&lt;span class='match'&gt;&lt;\/span&gt;}&lt;span class='match'&gt;&lt;\/span&gt;\n&lt;span class='match'&gt;&lt;\/span&gt; &lt;span class='match'&gt;a&lt;\/span&gt;&lt;span class='match'&gt;&lt;\/span&gt;b&lt;span class='match'&gt;&lt;\/span&gt;c&lt;span class='match'&gt;&lt;\/span&gt;d&lt;span class='match'&gt;&lt;\/span&gt;e&lt;span class='match'&gt;&lt;\/span&gt; &lt;span class='match'&gt;aaa&lt;\/span&gt;&lt;span class='match'&gt;&lt;\/span&gt; &lt;span class='match'&gt;&lt;\/span&gt;b&lt;span class='match'&gt;a&lt;\/span&gt;&lt;span class='match'&gt;&lt;\/span&gt;c&lt;span class='match'&gt;a&lt;\/span&gt;&lt;span class='match'&gt;&lt;\/span&gt;d&lt;span class='match'&gt;&lt;\/span&gt; &lt;span class='match'&gt;&lt;\/span&gt;.&lt;span class='match'&gt;a&lt;\/span&gt;&lt;span class='match'&gt;&lt;\/span&gt;.&lt;span class='match'&gt;aa&lt;\/span&gt;&lt;span class='match'&gt;&lt;\/span&gt;.&lt;span class='match'&gt;aaa&lt;\/span&gt;&lt;span class='match'&gt;&lt;\/span&gt; &lt;span class='match'&gt;a&lt;\/span&gt;&lt;span class='match'&gt;&lt;\/span&gt;b&lt;span class='match'&gt;&lt;\/span&gt;b&lt;span class='match'&gt;aa&lt;\/span&gt;&lt;span class='match'&gt;&lt;\/span&gt;b&lt;span class='match'&gt;&lt;\/span&gt; &lt;span class='match'&gt;a&lt;\/span&gt;&lt;span class='match'&gt;&lt;\/span&gt;b&lt;span class='match'&gt;a&lt;\/span&gt;&lt;span class='match'&gt;&lt;\/span&gt;b&lt;span class='match'&gt;&lt;\/span&gt;c&lt;span class='match'&gt;&lt;\/span&gt;b&lt;span class='match'&gt;a&lt;\/span&gt;&lt;span class='match'&gt;&lt;\/span&gt;b&lt;span class='match'&gt;&lt;\/span&gt;c&lt;span class='match'&gt;&lt;\/span&gt;d&lt;span class='match'&gt;&lt;\/span&gt;c&lt;span class='match'&gt;&lt;\/span&gt;b&lt;span class='match'&gt;a&lt;\/span&gt;&lt;span class='match'&gt;&lt;\/span&gt;b&lt;span class='match'&gt;&lt;\/span&gt;c&lt;span class='match'&gt;&lt;\/span&gt;d&lt;span class='match'&gt;&lt;\/span&gt;e&lt;span class='match'&gt;&lt;\/span&gt;&lt;\/li&gt;\n&lt;\/ul&gt;"},"evals":[],"jsHooks":[]}&lt;/script&gt;
&lt;div class="highlight"&gt;&lt;pre tabindex="0" class="chroma"&gt;&lt;code class="language-r" data-lang="r"&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="nf"&gt;see&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="s"&gt;&amp;#39;ac*&amp;#39;&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;&lt;span class="c1"&gt;# &amp;#39;a&amp;#39; 다음에 &amp;#39;c&amp;#39;가 없거나 하나 이상 있음 &lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;div id="htmlwidget-9" style="width:960px;height:100%;" class="str_view html-widget"&gt;&lt;/div&gt;
&lt;script type="application/json" data-for="htmlwidget-9"&gt;{"x":{"html":"&lt;ul&gt;\n &lt;li&gt;&lt;span class='match'&gt;a&lt;\/span&gt;bc ABC 123\t.!?\\(){}\n &lt;span class='match'&gt;a&lt;\/span&gt;bcde &lt;span class='match'&gt;a&lt;\/span&gt;&lt;span class='match'&gt;a&lt;\/span&gt;&lt;span class='match'&gt;a&lt;\/span&gt; b&lt;span class='match'&gt;ac&lt;\/span&gt;&lt;span class='match'&gt;a&lt;\/span&gt;d .&lt;span class='match'&gt;a&lt;\/span&gt;.&lt;span class='match'&gt;a&lt;\/span&gt;&lt;span class='match'&gt;a&lt;\/span&gt;.&lt;span class='match'&gt;a&lt;\/span&gt;&lt;span class='match'&gt;a&lt;\/span&gt;&lt;span class='match'&gt;a&lt;\/span&gt; &lt;span class='match'&gt;a&lt;\/span&gt;bb&lt;span class='match'&gt;a&lt;\/span&gt;&lt;span class='match'&gt;a&lt;\/span&gt;b &lt;span class='match'&gt;a&lt;\/span&gt;b&lt;span class='match'&gt;a&lt;\/span&gt;bcb&lt;span class='match'&gt;a&lt;\/span&gt;bcdcb&lt;span class='match'&gt;a&lt;\/span&gt;bcde&lt;\/li&gt;\n&lt;\/ul&gt;"},"evals":[],"jsHooks":[]}&lt;/script&gt;
&lt;p&gt;  *** **(곱하기)는 &lt;strong&gt;+&lt;/strong&gt;(더하기)와 유사하지만 결정적인 차이점으로 &lt;strong&gt;+&lt;/strong&gt;(더하기)는 기호에 해당하는 문자가 하나라도 있는 문자를 반환하지만, &lt;strong&gt;*&lt;/strong&gt;(곱하기)는 앞에 해당문자가 존재하지 않더라도 반환하는 특징이 있습니다.&lt;/p&gt;
&lt;h3 id="heading-7"&gt;“\[ \]”&lt;/h3&gt;
&lt;p&gt;  &lt;strong&gt;\[ \]&lt;/strong&gt;(대괄호)는 문자를 묶어서 표현할때 사용됩니다. 대괄호에 묶인 문자들은 각각 or로 취급이 됩니다.&lt;/p&gt;
&lt;div class="highlight"&gt;&lt;pre tabindex="0" class="chroma"&gt;&lt;code class="language-r" data-lang="r"&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="nf"&gt;see&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="s"&gt;&amp;#39;[abc]&amp;#39;&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt; &lt;span class="c1"&gt;# &amp;#39;a&amp;#39; or &amp;#39;b&amp;#39; or &amp;#39;c&amp;#39;를 찾아 반환&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;div id="htmlwidget-10" style="width:960px;height:100%;" class="str_view html-widget"&gt;&lt;/div&gt;
&lt;script type="application/json" data-for="htmlwidget-10"&gt;{"x":{"html":"&lt;ul&gt;\n &lt;li&gt;&lt;span class='match'&gt;a&lt;\/span&gt;&lt;span class='match'&gt;b&lt;\/span&gt;&lt;span class='match'&gt;c&lt;\/span&gt; ABC 123\t.!?\\(){}\n &lt;span class='match'&gt;a&lt;\/span&gt;&lt;span class='match'&gt;b&lt;\/span&gt;&lt;span class='match'&gt;c&lt;\/span&gt;de &lt;span class='match'&gt;a&lt;\/span&gt;&lt;span class='match'&gt;a&lt;\/span&gt;&lt;span class='match'&gt;a&lt;\/span&gt; &lt;span class='match'&gt;b&lt;\/span&gt;&lt;span class='match'&gt;a&lt;\/span&gt;&lt;span class='match'&gt;c&lt;\/span&gt;&lt;span class='match'&gt;a&lt;\/span&gt;d .&lt;span class='match'&gt;a&lt;\/span&gt;.&lt;span class='match'&gt;a&lt;\/span&gt;&lt;span class='match'&gt;a&lt;\/span&gt;.&lt;span class='match'&gt;a&lt;\/span&gt;&lt;span class='match'&gt;a&lt;\/span&gt;&lt;span class='match'&gt;a&lt;\/span&gt; &lt;span class='match'&gt;a&lt;\/span&gt;&lt;span class='match'&gt;b&lt;\/span&gt;&lt;span class='match'&gt;b&lt;\/span&gt;&lt;span class='match'&gt;a&lt;\/span&gt;&lt;span class='match'&gt;a&lt;\/span&gt;&lt;span class='match'&gt;b&lt;\/span&gt; &lt;span class='match'&gt;a&lt;\/span&gt;&lt;span class='match'&gt;b&lt;\/span&gt;&lt;span class='match'&gt;a&lt;\/span&gt;&lt;span class='match'&gt;b&lt;\/span&gt;&lt;span class='match'&gt;c&lt;\/span&gt;&lt;span class='match'&gt;b&lt;\/span&gt;&lt;span class='match'&gt;a&lt;\/span&gt;&lt;span class='match'&gt;b&lt;\/span&gt;&lt;span class='match'&gt;c&lt;\/span&gt;d&lt;span class='match'&gt;c&lt;\/span&gt;&lt;span class='match'&gt;b&lt;\/span&gt;&lt;span class='match'&gt;a&lt;\/span&gt;&lt;span class='match'&gt;b&lt;\/span&gt;&lt;span class='match'&gt;c&lt;\/span&gt;de&lt;\/li&gt;\n&lt;\/ul&gt;"},"evals":[],"jsHooks":[]}&lt;/script&gt;
&lt;div class="highlight"&gt;&lt;pre tabindex="0" class="chroma"&gt;&lt;code class="language-r" data-lang="r"&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="nf"&gt;see&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="s"&gt;&amp;#39;[abcde]c&amp;#39;&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt; &lt;span class="c1"&gt;# &amp;#39;c&amp;#39; 앞에 &amp;#39;a&amp;#39; or &amp;#39;b&amp;#39; or &amp;#39;c&amp;#39; or &amp;#39;d&amp;#39; or &amp;#39;e&amp;#39; 문자를 찾아 반환 (&amp;#39;ac&amp;#39;, &amp;#39;bc&amp;#39; 반환) &lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;div id="htmlwidget-11" style="width:960px;height:100%;" class="str_view html-widget"&gt;&lt;/div&gt;
&lt;script type="application/json" data-for="htmlwidget-11"&gt;{"x":{"html":"&lt;ul&gt;\n &lt;li&gt;a&lt;span class='match'&gt;bc&lt;\/span&gt; ABC 123\t.!?\\(){}\n a&lt;span class='match'&gt;bc&lt;\/span&gt;de aaa b&lt;span class='match'&gt;ac&lt;\/span&gt;ad .a.aa.aaa abbaab aba&lt;span class='match'&gt;bc&lt;\/span&gt;ba&lt;span class='match'&gt;bc&lt;\/span&gt;&lt;span class='match'&gt;dc&lt;\/span&gt;ba&lt;span class='match'&gt;bc&lt;\/span&gt;de&lt;\/li&gt;\n&lt;\/ul&gt;"},"evals":[],"jsHooks":[]}&lt;/script&gt;
&lt;div class="highlight"&gt;&lt;pre tabindex="0" class="chroma"&gt;&lt;code class="language-r" data-lang="r"&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="nf"&gt;see&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="s"&gt;&amp;#39;[A-Z][A-Z]C&amp;#39;&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt; &lt;span class="c1"&gt;# &amp;#39;C&amp;#39;의 두 부분 앞 문자에서 A부터 Z글자까지 있는 문자를 찾아서 반환 (&amp;#39;ABC&amp;#39; 반환)&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;div id="htmlwidget-12" style="width:960px;height:100%;" class="str_view html-widget"&gt;&lt;/div&gt;
&lt;script type="application/json" data-for="htmlwidget-12"&gt;{"x":{"html":"&lt;ul&gt;\n &lt;li&gt;abc &lt;span class='match'&gt;ABC&lt;\/span&gt; 123\t.!?\\(){}\n abcde aaa bacad .a.aa.aaa abbaab ababcbabcdcbabcde&lt;\/li&gt;\n&lt;\/ul&gt;"},"evals":[],"jsHooks":[]}&lt;/script&gt;
&lt;p&gt; 또한, 특정한 문자를 제외하는 의미로서 대괄호 안에 &lt;strong&gt;^&lt;/strong&gt;(윗 꺽쇠)를 사용합니다.&lt;/p&gt;
&lt;div class="highlight"&gt;&lt;pre tabindex="0" class="chroma"&gt;&lt;code class="language-r" data-lang="r"&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="nf"&gt;see&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="s"&gt;&amp;#39;[^abc]&amp;#39;&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt; &lt;span class="c1"&gt;# &amp;#39;a&amp;#39; or &amp;#39;b&amp;#39; or &amp;#39;c&amp;#39;를 제외한 문자를 반환&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;div id="htmlwidget-13" style="width:960px;height:100%;" class="str_view html-widget"&gt;&lt;/div&gt;
&lt;script type="application/json" data-for="htmlwidget-13"&gt;{"x":{"html":"&lt;ul&gt;\n &lt;li&gt;abc&lt;span class='match'&gt; &lt;\/span&gt;&lt;span class='match'&gt;A&lt;\/span&gt;&lt;span class='match'&gt;B&lt;\/span&gt;&lt;span class='match'&gt;C&lt;\/span&gt;&lt;span class='match'&gt; &lt;\/span&gt;&lt;span class='match'&gt;1&lt;\/span&gt;&lt;span class='match'&gt;2&lt;\/span&gt;&lt;span class='match'&gt;3&lt;\/span&gt;&lt;span class='match'&gt;\t&lt;\/span&gt;&lt;span class='match'&gt;.&lt;\/span&gt;&lt;span class='match'&gt;!&lt;\/span&gt;&lt;span class='match'&gt;?&lt;\/span&gt;&lt;span class='match'&gt;\\&lt;\/span&gt;&lt;span class='match'&gt;(&lt;\/span&gt;&lt;span class='match'&gt;)&lt;\/span&gt;&lt;span class='match'&gt;{&lt;\/span&gt;&lt;span class='match'&gt;}&lt;\/span&gt;&lt;span class='match'&gt;\n&lt;\/span&gt;&lt;span class='match'&gt; &lt;\/span&gt;abc&lt;span class='match'&gt;d&lt;\/span&gt;&lt;span class='match'&gt;e&lt;\/span&gt;&lt;span class='match'&gt; &lt;\/span&gt;aaa&lt;span class='match'&gt; &lt;\/span&gt;baca&lt;span class='match'&gt;d&lt;\/span&gt;&lt;span class='match'&gt; &lt;\/span&gt;&lt;span class='match'&gt;.&lt;\/span&gt;a&lt;span class='match'&gt;.&lt;\/span&gt;aa&lt;span class='match'&gt;.&lt;\/span&gt;aaa&lt;span class='match'&gt; &lt;\/span&gt;abbaab&lt;span class='match'&gt; &lt;\/span&gt;ababcbabc&lt;span class='match'&gt;d&lt;\/span&gt;cbabc&lt;span class='match'&gt;d&lt;\/span&gt;&lt;span class='match'&gt;e&lt;\/span&gt;&lt;\/li&gt;\n&lt;\/ul&gt;"},"evals":[],"jsHooks":[]}&lt;/script&gt;
&lt;h3 id="-"&gt;“{ }”&lt;/h3&gt;
&lt;p&gt; &lt;strong&gt;{ }&lt;/strong&gt;(중괄호)는 문자의 개수를 샐때 사용됩니다. 중괄호에는 세가지 용법이 있습니다.&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;{n,m} : 앞 문자가 n개 이상 m개 이하를 의미.&lt;/li&gt;
&lt;li&gt;{n,} : 앞 문자가 n개 이상을 의미.&lt;/li&gt;
&lt;li&gt;{n} : 앞 문자가 정확하게 n개를 의미.&lt;/li&gt;
&lt;/ul&gt;
&lt;div class="highlight"&gt;&lt;pre tabindex="0" class="chroma"&gt;&lt;code class="language-r" data-lang="r"&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="nf"&gt;see&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="s"&gt;&amp;#39;a{1,2}&amp;#39;&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt; &lt;span class="c1"&gt;# &amp;#39;a&amp;#39; 글자가 1개 이상 2개 이하를 표시 &lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;div id="htmlwidget-14" style="width:960px;height:100%;" class="str_view html-widget"&gt;&lt;/div&gt;
&lt;script type="application/json" data-for="htmlwidget-14"&gt;{"x":{"html":"&lt;ul&gt;\n &lt;li&gt;&lt;span class='match'&gt;a&lt;\/span&gt;bc ABC 123\t.!?\\(){}\n &lt;span class='match'&gt;a&lt;\/span&gt;bcde &lt;span class='match'&gt;aa&lt;\/span&gt;&lt;span class='match'&gt;a&lt;\/span&gt; b&lt;span class='match'&gt;a&lt;\/span&gt;c&lt;span class='match'&gt;a&lt;\/span&gt;d .&lt;span class='match'&gt;a&lt;\/span&gt;.&lt;span class='match'&gt;aa&lt;\/span&gt;.&lt;span class='match'&gt;aa&lt;\/span&gt;&lt;span class='match'&gt;a&lt;\/span&gt; &lt;span class='match'&gt;a&lt;\/span&gt;bb&lt;span class='match'&gt;aa&lt;\/span&gt;b &lt;span class='match'&gt;a&lt;\/span&gt;b&lt;span class='match'&gt;a&lt;\/span&gt;bcb&lt;span class='match'&gt;a&lt;\/span&gt;bcdcb&lt;span class='match'&gt;a&lt;\/span&gt;bcde&lt;\/li&gt;\n&lt;\/ul&gt;"},"evals":[],"jsHooks":[]}&lt;/script&gt;
&lt;div class="highlight"&gt;&lt;pre tabindex="0" class="chroma"&gt;&lt;code class="language-r" data-lang="r"&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="nf"&gt;see&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="s"&gt;&amp;#39;b{1,}&amp;#39;&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt; &lt;span class="c1"&gt;# &amp;#39;b&amp;#39; 글자가 1개 이상인 경우를 표시&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;div id="htmlwidget-15" style="width:960px;height:100%;" class="str_view html-widget"&gt;&lt;/div&gt;
&lt;script type="application/json" data-for="htmlwidget-15"&gt;{"x":{"html":"&lt;ul&gt;\n &lt;li&gt;a&lt;span class='match'&gt;b&lt;\/span&gt;c ABC 123\t.!?\\(){}\n a&lt;span class='match'&gt;b&lt;\/span&gt;cde aaa &lt;span class='match'&gt;b&lt;\/span&gt;acad .a.aa.aaa a&lt;span class='match'&gt;bb&lt;\/span&gt;aa&lt;span class='match'&gt;b&lt;\/span&gt; a&lt;span class='match'&gt;b&lt;\/span&gt;a&lt;span class='match'&gt;b&lt;\/span&gt;c&lt;span class='match'&gt;b&lt;\/span&gt;a&lt;span class='match'&gt;b&lt;\/span&gt;cdc&lt;span class='match'&gt;b&lt;\/span&gt;a&lt;span class='match'&gt;b&lt;\/span&gt;cde&lt;\/li&gt;\n&lt;\/ul&gt;"},"evals":[],"jsHooks":[]}&lt;/script&gt;
&lt;div class="highlight"&gt;&lt;pre tabindex="0" class="chroma"&gt;&lt;code class="language-r" data-lang="r"&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="nf"&gt;see&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="s"&gt;&amp;#39;c{1}&amp;#39;&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt; &lt;span class="c1"&gt;# &amp;#39;c&amp;#39; 글자가 1개인 경우를 표시 &lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;div id="htmlwidget-16" style="width:960px;height:100%;" class="str_view html-widget"&gt;&lt;/div&gt;
&lt;script type="application/json" data-for="htmlwidget-16"&gt;{"x":{"html":"&lt;ul&gt;\n &lt;li&gt;ab&lt;span class='match'&gt;c&lt;\/span&gt; ABC 123\t.!?\\(){}\n ab&lt;span class='match'&gt;c&lt;\/span&gt;de aaa ba&lt;span class='match'&gt;c&lt;\/span&gt;ad .a.aa.aaa abbaab abab&lt;span class='match'&gt;c&lt;\/span&gt;bab&lt;span class='match'&gt;c&lt;\/span&gt;d&lt;span class='match'&gt;c&lt;\/span&gt;bab&lt;span class='match'&gt;c&lt;\/span&gt;de&lt;\/li&gt;\n&lt;\/ul&gt;"},"evals":[],"jsHooks":[]}&lt;/script&gt;
&lt;h3 id="--1"&gt;“( )”&lt;/h3&gt;
&lt;p&gt; &lt;strong&gt;( )&lt;/strong&gt;(소괄호)는 문자를 묶어서 표현할때 사용합니다. 소괄호에 묶인 문자들은 각각 and로 취급됩니다.&lt;/p&gt;
&lt;div class="highlight"&gt;&lt;pre tabindex="0" class="chroma"&gt;&lt;code class="language-r" data-lang="r"&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="nf"&gt;see&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="s"&gt;&amp;#39;(abc)&amp;#39;&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt; &lt;span class="c1"&gt;# &amp;#39;abc&amp;#39; 문자를 찾아 반화 &lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;div id="htmlwidget-17" style="width:960px;height:100%;" class="str_view html-widget"&gt;&lt;/div&gt;
&lt;script type="application/json" data-for="htmlwidget-17"&gt;{"x":{"html":"&lt;ul&gt;\n &lt;li&gt;&lt;span class='match'&gt;abc&lt;\/span&gt; ABC 123\t.!?\\(){}\n &lt;span class='match'&gt;abc&lt;\/span&gt;de aaa bacad .a.aa.aaa abbaab ab&lt;span class='match'&gt;abc&lt;\/span&gt;b&lt;span class='match'&gt;abc&lt;\/span&gt;dcb&lt;span class='match'&gt;abc&lt;\/span&gt;de&lt;\/li&gt;\n&lt;\/ul&gt;"},"evals":[],"jsHooks":[]}&lt;/script&gt;
&lt;div class="highlight"&gt;&lt;pre tabindex="0" class="chroma"&gt;&lt;code class="language-r" data-lang="r"&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="nf"&gt;see&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="s"&gt;&amp;#39;(abcde)c&amp;#39;&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt; &lt;span class="c1"&gt;# &amp;#39;c&amp;#39; 앞에 &amp;#39;abcde&amp;#39; 문자를 찾아 반환 (조건에 맞는 결과 없음)&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;div id="htmlwidget-18" style="width:960px;height:100%;" class="str_view html-widget"&gt;&lt;/div&gt;
&lt;script type="application/json" data-for="htmlwidget-18"&gt;{"x":{"html":"&lt;ul&gt;\n &lt;li&gt;abc ABC 123\t.!?\\(){}\n abcde aaa bacad .a.aa.aaa abbaab ababcbabcdcbabcde&lt;\/li&gt;\n&lt;\/ul&gt;"},"evals":[],"jsHooks":[]}&lt;/script&gt;
&lt;div class="highlight"&gt;&lt;pre tabindex="0" class="chroma"&gt;&lt;code class="language-r" data-lang="r"&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="nf"&gt;see&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="s"&gt;&amp;#39;a(bc)ba&amp;#39;&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt; &lt;span class="c1"&gt;# &amp;#39;a&amp;#39; 와 &amp;#39;ba&amp;#39; 사이에 &amp;#39;bc&amp;#39;가 존재하는 경우의 문자를 반환 (&amp;#39;abcba&amp;#39; 반환)&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;div id="htmlwidget-19" style="width:960px;height:100%;" class="str_view html-widget"&gt;&lt;/div&gt;
&lt;script type="application/json" data-for="htmlwidget-19"&gt;{"x":{"html":"&lt;ul&gt;\n &lt;li&gt;abc ABC 123\t.!?\\(){}\n abcde aaa bacad .a.aa.aaa abbaab ab&lt;span class='match'&gt;abcba&lt;\/span&gt;bcdcbabcde&lt;\/li&gt;\n&lt;\/ul&gt;"},"evals":[],"jsHooks":[]}&lt;/script&gt;
&lt;div class="highlight"&gt;&lt;pre tabindex="0" class="chroma"&gt;&lt;code class="language-r" data-lang="r"&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="nf"&gt;see&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="s"&gt;&amp;#39;a(b|c)ba&amp;#39;&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt; &lt;span class="c1"&gt;# &amp;#39;a&amp;#39; 와 &amp;#39;ba&amp;#39; 사이에 &amp;#39;b&amp;#39; 또는 &amp;#39;c&amp;#39;가 존재하는 경우의 문자를 반환 (&amp;#39;abba&amp;#39; 반환 ) &lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;div id="htmlwidget-20" style="width:960px;height:100%;" class="str_view html-widget"&gt;&lt;/div&gt;
&lt;script type="application/json" data-for="htmlwidget-20"&gt;{"x":{"html":"&lt;ul&gt;\n &lt;li&gt;abc ABC 123\t.!?\\(){}\n abcde aaa bacad .a.aa.aaa &lt;span class='match'&gt;abba&lt;\/span&gt;ab ababcbabcdcbabcde&lt;\/li&gt;\n&lt;\/ul&gt;"},"evals":[],"jsHooks":[]}&lt;/script&gt;
&lt;p&gt; 대괄호에 묶인 문자는 ‘or’ 취급이지만, 소괄호는 위의 경우처럼 별도의 or 표시 없이는 ‘and’ 취급이 되는것이 차이점입니다.&lt;/p&gt;
&lt;h3 id="heading-8"&gt;“\”&lt;/h3&gt;
&lt;p&gt; 앞서 &lt;strong&gt;.&lt;/strong&gt;(마침표)는 임의의 한 글자를 찾을때 사용하는 메타문자라고 말씀을 드렸는데요. 그렇다면 만약 정규표현식을 사용하여 마침표 자체를 찾고싶을땐 어떻게 해야할까요? ’a.a’라는 문자를 찾는 상황을 가정해보겠습니다.&lt;/p&gt;
&lt;div class="highlight"&gt;&lt;pre tabindex="0" class="chroma"&gt;&lt;code class="language-r" data-lang="r"&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="nf"&gt;see&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="s"&gt;&amp;#39;a.a&amp;#39;&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt; &lt;span class="c1"&gt;# &amp;#39;a.a&amp;#39; 문자 반환?&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;div id="htmlwidget-21" style="width:960px;height:100%;" class="str_view html-widget"&gt;&lt;/div&gt;
&lt;script type="application/json" data-for="htmlwidget-21"&gt;{"x":{"html":"&lt;ul&gt;\n &lt;li&gt;abc ABC 123\t.!?\\(){}\n abcde &lt;span class='match'&gt;aaa&lt;\/span&gt; b&lt;span class='match'&gt;aca&lt;\/span&gt;d .&lt;span class='match'&gt;a.a&lt;\/span&gt;&lt;span class='match'&gt;a.a&lt;\/span&gt;a&lt;span class='match'&gt;a a&lt;\/span&gt;bbaab &lt;span class='match'&gt;aba&lt;\/span&gt;bcbabcdcbabcde&lt;\/li&gt;\n&lt;\/ul&gt;"},"evals":[],"jsHooks":[]}&lt;/script&gt;
&lt;p&gt; ‘a.a’라는 문자를 찾은걸 볼 수 있지만, 그것과 더불어서 ’aaa,’ ‘aca,’ ’a a’문자 역시 매칭이 되는 것을 볼 수 있습니다. 그 이유는 공교롭게도 “.”(마침표)역시 정규표현식에서 특수한 의미를 갖는 메타문자이기 때문입니다. 정규표현식 내에서 메타문자 자체를 특정하기 위해선 그 문자 앞에 메타문자 종류중 하나인 “&lt;strong&gt;\&lt;/strong&gt;”(역슬래시)를 붙여야합니다.&lt;/p&gt;
&lt;p&gt; 그렇다면 이번에는 역슬래시를 활용하여 ’a.a’라는 문자를 찾아보도록 하겠습니다. 문자 가운데에 마침표가 메타문자가 아니라는것을 인지시키기 위하여 마침표 앞에 역슬래시를 붙였습니다.&lt;/p&gt;
&lt;div class="highlight"&gt;&lt;pre tabindex="0" class="chroma"&gt;&lt;code class="language-r" data-lang="r"&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="nf"&gt;see&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="s"&gt;&amp;#39;a\.a&amp;#39;&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt; &lt;span class="c1"&gt;# 역슬래시 사용 &lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;pre&gt;&lt;code&gt;#&amp;gt; Error: &amp;quot;'a\.&amp;quot;로 시작하는 문자열 중에서 '\.'는 인식할 수 없는 이스케이프입니다
&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt; 역슬래시를 사용했음에도 불구하고 에러가 발생하였습니다. 여기서 한가지 더 짚고 넘어가야 할 부분은 메타문자를 찾기 위해선 역슬래시를 두 개를 붙여야 한다는 것입니다. 왜 그러하냐 하면 입력된 문자를 R parser가 처리하는 과정에서 역슬래시를 추정하는데 두 개의 역슬래시를 요구하기 때문입니다. 역슬래시를 하나만을 붙여서는 R에서 인지하지 못합니다. 역슬래시의 기능을 사용하기 위해선 &lt;strong&gt;역슬래시 두 개를 붙여줘야 합니다.&lt;/strong&gt; 그래야 비로소 R이 두 개 붙인 역슬래시 앞의 역슬래시가 일반문자가 아님을 인지하고 해당 패턴을 찾아냅니다.&lt;/p&gt;
&lt;p&gt; 이처럼 역슬래시가 메타문자를 메타문자로부터 탈출시키기에 &lt;em&gt;이스케이프 문자&lt;/em&gt;라 부르기도 합니다.&lt;/p&gt;
&lt;div class="highlight"&gt;&lt;pre tabindex="0" class="chroma"&gt;&lt;code class="language-r" data-lang="r"&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="nf"&gt;see&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="s"&gt;&amp;#39;a\\.a&amp;#39;&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt; &lt;span class="c1"&gt;# 역슬래시 두 개 사용 &lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;div id="htmlwidget-22" style="width:960px;height:100%;" class="str_view html-widget"&gt;&lt;/div&gt;
&lt;script type="application/json" data-for="htmlwidget-22"&gt;{"x":{"html":"&lt;ul&gt;\n &lt;li&gt;abc ABC 123\t.!?\\(){}\n abcde aaa bacad .&lt;span class='match'&gt;a.a&lt;\/span&gt;&lt;span class='match'&gt;a.a&lt;\/span&gt;aa abbaab ababcbabcdcbabcde&lt;\/li&gt;\n&lt;\/ul&gt;"},"evals":[],"jsHooks":[]}&lt;/script&gt;
&lt;p&gt; 이번에는 찾고자 하던 ’a.a’단어를 정확하게 찾아낸 것을 볼 수 있습니다.&lt;/p&gt;
&lt;h3 id="--일반문자"&gt;“\ + 일반문자”&lt;/h3&gt;
&lt;p&gt; 앞서 역슬래시( \ )가 일반문자로 탈출시키는 &lt;em&gt;이스케이프 문자&lt;/em&gt;라 설명드렸는데요. 정규표현식에서는 이러한 이스케이프 문자의 특성을 살린 특별한 기능이 몇 가지 더 있습니다. 그건 바로 일반 이스케이프 문자와 일반문자와의 조합을 통해 새로운 기능을 수행하는 것입니다. 일반문자중 일부 문자들은 이러한 특성을 지니고 있으며, 이를 정리하자면 다음과 같습니다.&lt;/p&gt;
&lt;table class="table table-striped table-hover table-condensed" style="font-size: 13px; "&gt;
&lt;thead&gt;
&lt;tr&gt;
&lt;th style="text-align:center;"&gt;
＼ + 일반문자
&lt;/th&gt;
&lt;th style="text-align:center;"&gt;
의미
&lt;/th&gt;
&lt;th style="text-align:center;"&gt;
예시
&lt;/th&gt;
&lt;th style="text-align:center;"&gt;
결과
&lt;/th&gt;
&lt;/tr&gt;
&lt;/thead&gt;
&lt;tbody&gt;
&lt;tr&gt;
&lt;td style="text-align:center;min-width: 12em; "&gt;
＼n
&lt;/td&gt;
&lt;td style="text-align:center;min-width: 7em; "&gt;
줄바꿈
&lt;/td&gt;
&lt;td style="text-align:center;min-width: 10em; "&gt;
see(“\\n”)
&lt;/td&gt;
&lt;td style="text-align:center;min-width: 60em; "&gt;
&lt;div id="htmlwidget-23" class="str_view html-widget" style="width:600px;height:10px;"&gt;
&lt;/div&gt;
&lt;script type="application/json" data-for="htmlwidget-23"&gt;{"x":{"html":"&lt;ul&gt;\n &lt;li&gt;abc ABC 123\t.!?\\(){}&lt;span class='match'&gt;\n&lt;\/span&gt; abcde aaa bacad .a.aa.aaa abbaab ababcbabcdcbabcde&lt;\/li&gt;\n&lt;\/ul&gt;"},"evals":[],"jsHooks":[]}&lt;/script&gt;
&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td style="text-align:center;min-width: 12em; "&gt;
＼t
&lt;/td&gt;
&lt;td style="text-align:center;min-width: 7em; "&gt;
탭
&lt;/td&gt;
&lt;td style="text-align:center;min-width: 10em; "&gt;
see(“\\t”)
&lt;/td&gt;
&lt;td style="text-align:center;min-width: 60em; "&gt;
&lt;div id="htmlwidget-24" class="str_view html-widget" style="width:600px;height:10px;"&gt;
&lt;/div&gt;
&lt;script type="application/json" data-for="htmlwidget-24"&gt;{"x":{"html":"&lt;ul&gt;\n &lt;li&gt;abc ABC 123&lt;span class='match'&gt;\t&lt;\/span&gt;.!?\\(){}\n abcde aaa bacad .a.aa.aaa abbaab ababcbabcdcbabcde&lt;\/li&gt;\n&lt;\/ul&gt;"},"evals":[],"jsHooks":[]}&lt;/script&gt;
&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td style="text-align:center;min-width: 12em; "&gt;
＼s
&lt;/td&gt;
&lt;td style="text-align:center;min-width: 7em; "&gt;
공백
&lt;/td&gt;
&lt;td style="text-align:center;min-width: 10em; "&gt;
see(“\\s”)
&lt;/td&gt;
&lt;td style="text-align:center;min-width: 60em; "&gt;
&lt;div id="htmlwidget-25" class="str_view html-widget" style="width:600px;height:10px;"&gt;
&lt;/div&gt;
&lt;script type="application/json" data-for="htmlwidget-25"&gt;{"x":{"html":"&lt;ul&gt;\n &lt;li&gt;abc&lt;span class='match'&gt; &lt;\/span&gt;ABC&lt;span class='match'&gt; &lt;\/span&gt;123&lt;span class='match'&gt;\t&lt;\/span&gt;.!?\\(){}&lt;span class='match'&gt;\n&lt;\/span&gt;&lt;span class='match'&gt; &lt;\/span&gt;abcde&lt;span class='match'&gt; &lt;\/span&gt;aaa&lt;span class='match'&gt; &lt;\/span&gt;bacad&lt;span class='match'&gt; &lt;\/span&gt;.a.aa.aaa&lt;span class='match'&gt; &lt;\/span&gt;abbaab&lt;span class='match'&gt; &lt;\/span&gt;ababcbabcdcbabcde&lt;\/li&gt;\n&lt;\/ul&gt;"},"evals":[],"jsHooks":[]}&lt;/script&gt;
&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td style="text-align:center;min-width: 12em; "&gt;
＼S
&lt;/td&gt;
&lt;td style="text-align:center;min-width: 7em; "&gt;
공백아님
&lt;/td&gt;
&lt;td style="text-align:center;min-width: 10em; "&gt;
see(“\\S”)
&lt;/td&gt;
&lt;td style="text-align:center;min-width: 60em; "&gt;
&lt;div id="htmlwidget-26" class="str_view html-widget" style="width:600px;height:10px;"&gt;
&lt;/div&gt;
&lt;script type="application/json" data-for="htmlwidget-26"&gt;{"x":{"html":"&lt;ul&gt;\n &lt;li&gt;&lt;span class='match'&gt;a&lt;\/span&gt;&lt;span class='match'&gt;b&lt;\/span&gt;&lt;span class='match'&gt;c&lt;\/span&gt; &lt;span class='match'&gt;A&lt;\/span&gt;&lt;span class='match'&gt;B&lt;\/span&gt;&lt;span class='match'&gt;C&lt;\/span&gt; &lt;span class='match'&gt;1&lt;\/span&gt;&lt;span class='match'&gt;2&lt;\/span&gt;&lt;span class='match'&gt;3&lt;\/span&gt;\t&lt;span class='match'&gt;.&lt;\/span&gt;&lt;span class='match'&gt;!&lt;\/span&gt;&lt;span class='match'&gt;?&lt;\/span&gt;&lt;span class='match'&gt;\\&lt;\/span&gt;&lt;span class='match'&gt;(&lt;\/span&gt;&lt;span class='match'&gt;)&lt;\/span&gt;&lt;span class='match'&gt;{&lt;\/span&gt;&lt;span class='match'&gt;}&lt;\/span&gt;\n &lt;span class='match'&gt;a&lt;\/span&gt;&lt;span class='match'&gt;b&lt;\/span&gt;&lt;span class='match'&gt;c&lt;\/span&gt;&lt;span class='match'&gt;d&lt;\/span&gt;&lt;span class='match'&gt;e&lt;\/span&gt; &lt;span class='match'&gt;a&lt;\/span&gt;&lt;span class='match'&gt;a&lt;\/span&gt;&lt;span class='match'&gt;a&lt;\/span&gt; &lt;span class='match'&gt;b&lt;\/span&gt;&lt;span class='match'&gt;a&lt;\/span&gt;&lt;span class='match'&gt;c&lt;\/span&gt;&lt;span class='match'&gt;a&lt;\/span&gt;&lt;span class='match'&gt;d&lt;\/span&gt; &lt;span class='match'&gt;.&lt;\/span&gt;&lt;span class='match'&gt;a&lt;\/span&gt;&lt;span class='match'&gt;.&lt;\/span&gt;&lt;span class='match'&gt;a&lt;\/span&gt;&lt;span class='match'&gt;a&lt;\/span&gt;&lt;span class='match'&gt;.&lt;\/span&gt;&lt;span class='match'&gt;a&lt;\/span&gt;&lt;span class='match'&gt;a&lt;\/span&gt;&lt;span class='match'&gt;a&lt;\/span&gt; &lt;span class='match'&gt;a&lt;\/span&gt;&lt;span class='match'&gt;b&lt;\/span&gt;&lt;span class='match'&gt;b&lt;\/span&gt;&lt;span class='match'&gt;a&lt;\/span&gt;&lt;span class='match'&gt;a&lt;\/span&gt;&lt;span class='match'&gt;b&lt;\/span&gt; &lt;span class='match'&gt;a&lt;\/span&gt;&lt;span class='match'&gt;b&lt;\/span&gt;&lt;span class='match'&gt;a&lt;\/span&gt;&lt;span class='match'&gt;b&lt;\/span&gt;&lt;span class='match'&gt;c&lt;\/span&gt;&lt;span class='match'&gt;b&lt;\/span&gt;&lt;span class='match'&gt;a&lt;\/span&gt;&lt;span class='match'&gt;b&lt;\/span&gt;&lt;span class='match'&gt;c&lt;\/span&gt;&lt;span class='match'&gt;d&lt;\/span&gt;&lt;span class='match'&gt;c&lt;\/span&gt;&lt;span class='match'&gt;b&lt;\/span&gt;&lt;span class='match'&gt;a&lt;\/span&gt;&lt;span class='match'&gt;b&lt;\/span&gt;&lt;span class='match'&gt;c&lt;\/span&gt;&lt;span class='match'&gt;d&lt;\/span&gt;&lt;span class='match'&gt;e&lt;\/span&gt;&lt;\/li&gt;\n&lt;\/ul&gt;"},"evals":[],"jsHooks":[]}&lt;/script&gt;
&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td style="text-align:center;min-width: 12em; "&gt;
＼d
&lt;/td&gt;
&lt;td style="text-align:center;min-width: 7em; "&gt;
숫자
&lt;/td&gt;
&lt;td style="text-align:center;min-width: 10em; "&gt;
see(“\\d”)
&lt;/td&gt;
&lt;td style="text-align:center;min-width: 60em; "&gt;
&lt;div id="htmlwidget-27" class="str_view html-widget" style="width:600px;height:10px;"&gt;
&lt;/div&gt;
&lt;script type="application/json" data-for="htmlwidget-27"&gt;{"x":{"html":"&lt;ul&gt;\n &lt;li&gt;abc ABC &lt;span class='match'&gt;1&lt;\/span&gt;&lt;span class='match'&gt;2&lt;\/span&gt;&lt;span class='match'&gt;3&lt;\/span&gt;\t.!?\\(){}\n abcde aaa bacad .a.aa.aaa abbaab ababcbabcdcbabcde&lt;\/li&gt;\n&lt;\/ul&gt;"},"evals":[],"jsHooks":[]}&lt;/script&gt;
&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td style="text-align:center;min-width: 12em; "&gt;
＼D
&lt;/td&gt;
&lt;td style="text-align:center;min-width: 7em; "&gt;
숫자아님
&lt;/td&gt;
&lt;td style="text-align:center;min-width: 10em; "&gt;
see(“\\D”)
&lt;/td&gt;
&lt;td style="text-align:center;min-width: 60em; "&gt;
&lt;div id="htmlwidget-28" class="str_view html-widget" style="width:620px;height:10px;"&gt;
&lt;/div&gt;
&lt;script type="application/json" data-for="htmlwidget-28"&gt;{"x":{"html":"&lt;ul&gt;\n &lt;li&gt;&lt;span class='match'&gt;a&lt;\/span&gt;&lt;span class='match'&gt;b&lt;\/span&gt;&lt;span class='match'&gt;c&lt;\/span&gt;&lt;span class='match'&gt; &lt;\/span&gt;&lt;span class='match'&gt;A&lt;\/span&gt;&lt;span class='match'&gt;B&lt;\/span&gt;&lt;span class='match'&gt;C&lt;\/span&gt;&lt;span class='match'&gt; &lt;\/span&gt;123&lt;span class='match'&gt;\t&lt;\/span&gt;&lt;span class='match'&gt;.&lt;\/span&gt;&lt;span class='match'&gt;!&lt;\/span&gt;&lt;span class='match'&gt;?&lt;\/span&gt;&lt;span class='match'&gt;\\&lt;\/span&gt;&lt;span class='match'&gt;(&lt;\/span&gt;&lt;span class='match'&gt;)&lt;\/span&gt;&lt;span class='match'&gt;{&lt;\/span&gt;&lt;span class='match'&gt;}&lt;\/span&gt;&lt;span class='match'&gt;\n&lt;\/span&gt;&lt;span class='match'&gt; &lt;\/span&gt;&lt;span class='match'&gt;a&lt;\/span&gt;&lt;span class='match'&gt;b&lt;\/span&gt;&lt;span class='match'&gt;c&lt;\/span&gt;&lt;span class='match'&gt;d&lt;\/span&gt;&lt;span class='match'&gt;e&lt;\/span&gt;&lt;span class='match'&gt; &lt;\/span&gt;&lt;span class='match'&gt;a&lt;\/span&gt;&lt;span class='match'&gt;a&lt;\/span&gt;&lt;span class='match'&gt;a&lt;\/span&gt;&lt;span class='match'&gt; &lt;\/span&gt;&lt;span class='match'&gt;b&lt;\/span&gt;&lt;span class='match'&gt;a&lt;\/span&gt;&lt;span class='match'&gt;c&lt;\/span&gt;&lt;span class='match'&gt;a&lt;\/span&gt;&lt;span class='match'&gt;d&lt;\/span&gt;&lt;span class='match'&gt; &lt;\/span&gt;&lt;span class='match'&gt;.&lt;\/span&gt;&lt;span class='match'&gt;a&lt;\/span&gt;&lt;span class='match'&gt;.&lt;\/span&gt;&lt;span class='match'&gt;a&lt;\/span&gt;&lt;span class='match'&gt;a&lt;\/span&gt;&lt;span class='match'&gt;.&lt;\/span&gt;&lt;span class='match'&gt;a&lt;\/span&gt;&lt;span class='match'&gt;a&lt;\/span&gt;&lt;span class='match'&gt;a&lt;\/span&gt;&lt;span class='match'&gt; &lt;\/span&gt;&lt;span class='match'&gt;a&lt;\/span&gt;&lt;span class='match'&gt;b&lt;\/span&gt;&lt;span class='match'&gt;b&lt;\/span&gt;&lt;span class='match'&gt;a&lt;\/span&gt;&lt;span class='match'&gt;a&lt;\/span&gt;&lt;span class='match'&gt;b&lt;\/span&gt;&lt;span class='match'&gt; &lt;\/span&gt;&lt;span class='match'&gt;a&lt;\/span&gt;&lt;span class='match'&gt;b&lt;\/span&gt;&lt;span class='match'&gt;a&lt;\/span&gt;&lt;span class='match'&gt;b&lt;\/span&gt;&lt;span class='match'&gt;c&lt;\/span&gt;&lt;span class='match'&gt;b&lt;\/span&gt;&lt;span class='match'&gt;a&lt;\/span&gt;&lt;span class='match'&gt;b&lt;\/span&gt;&lt;span class='match'&gt;c&lt;\/span&gt;&lt;span class='match'&gt;d&lt;\/span&gt;&lt;span class='match'&gt;c&lt;\/span&gt;&lt;span class='match'&gt;b&lt;\/span&gt;&lt;span class='match'&gt;a&lt;\/span&gt;&lt;span class='match'&gt;b&lt;\/span&gt;&lt;span class='match'&gt;c&lt;\/span&gt;&lt;span class='match'&gt;d&lt;\/span&gt;&lt;span class='match'&gt;e&lt;\/span&gt;&lt;\/li&gt;\n&lt;\/ul&gt;"},"evals":[],"jsHooks":[]}&lt;/script&gt;
&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td style="text-align:center;min-width: 12em; "&gt;
＼w
&lt;/td&gt;
&lt;td style="text-align:center;min-width: 7em; "&gt;
문자
&lt;/td&gt;
&lt;td style="text-align:center;min-width: 10em; "&gt;
see(“\\w”)
&lt;/td&gt;
&lt;td style="text-align:center;min-width: 60em; "&gt;
&lt;div id="htmlwidget-29" class="str_view html-widget" style="width:600px;height:10px;"&gt;
&lt;/div&gt;
&lt;script type="application/json" data-for="htmlwidget-29"&gt;{"x":{"html":"&lt;ul&gt;\n &lt;li&gt;&lt;span class='match'&gt;a&lt;\/span&gt;&lt;span class='match'&gt;b&lt;\/span&gt;&lt;span class='match'&gt;c&lt;\/span&gt; &lt;span class='match'&gt;A&lt;\/span&gt;&lt;span class='match'&gt;B&lt;\/span&gt;&lt;span class='match'&gt;C&lt;\/span&gt; &lt;span class='match'&gt;1&lt;\/span&gt;&lt;span class='match'&gt;2&lt;\/span&gt;&lt;span class='match'&gt;3&lt;\/span&gt;\t.!?\\(){}\n &lt;span class='match'&gt;a&lt;\/span&gt;&lt;span class='match'&gt;b&lt;\/span&gt;&lt;span class='match'&gt;c&lt;\/span&gt;&lt;span class='match'&gt;d&lt;\/span&gt;&lt;span class='match'&gt;e&lt;\/span&gt; &lt;span class='match'&gt;a&lt;\/span&gt;&lt;span class='match'&gt;a&lt;\/span&gt;&lt;span class='match'&gt;a&lt;\/span&gt; &lt;span class='match'&gt;b&lt;\/span&gt;&lt;span class='match'&gt;a&lt;\/span&gt;&lt;span class='match'&gt;c&lt;\/span&gt;&lt;span class='match'&gt;a&lt;\/span&gt;&lt;span class='match'&gt;d&lt;\/span&gt; .&lt;span class='match'&gt;a&lt;\/span&gt;.&lt;span class='match'&gt;a&lt;\/span&gt;&lt;span class='match'&gt;a&lt;\/span&gt;.&lt;span class='match'&gt;a&lt;\/span&gt;&lt;span class='match'&gt;a&lt;\/span&gt;&lt;span class='match'&gt;a&lt;\/span&gt; &lt;span class='match'&gt;a&lt;\/span&gt;&lt;span class='match'&gt;b&lt;\/span&gt;&lt;span class='match'&gt;b&lt;\/span&gt;&lt;span class='match'&gt;a&lt;\/span&gt;&lt;span class='match'&gt;a&lt;\/span&gt;&lt;span class='match'&gt;b&lt;\/span&gt; &lt;span class='match'&gt;a&lt;\/span&gt;&lt;span class='match'&gt;b&lt;\/span&gt;&lt;span class='match'&gt;a&lt;\/span&gt;&lt;span class='match'&gt;b&lt;\/span&gt;&lt;span class='match'&gt;c&lt;\/span&gt;&lt;span class='match'&gt;b&lt;\/span&gt;&lt;span class='match'&gt;a&lt;\/span&gt;&lt;span class='match'&gt;b&lt;\/span&gt;&lt;span class='match'&gt;c&lt;\/span&gt;&lt;span class='match'&gt;d&lt;\/span&gt;&lt;span class='match'&gt;c&lt;\/span&gt;&lt;span class='match'&gt;b&lt;\/span&gt;&lt;span class='match'&gt;a&lt;\/span&gt;&lt;span class='match'&gt;b&lt;\/span&gt;&lt;span class='match'&gt;c&lt;\/span&gt;&lt;span class='match'&gt;d&lt;\/span&gt;&lt;span class='match'&gt;e&lt;\/span&gt;&lt;\/li&gt;\n&lt;\/ul&gt;"},"evals":[],"jsHooks":[]}&lt;/script&gt;
&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td style="text-align:center;min-width: 12em; "&gt;
＼W
&lt;/td&gt;
&lt;td style="text-align:center;min-width: 7em; "&gt;
문자아님
&lt;/td&gt;
&lt;td style="text-align:center;min-width: 10em; "&gt;
see(“\\W”)
&lt;/td&gt;
&lt;td style="text-align:center;min-width: 60em; "&gt;
&lt;div id="htmlwidget-30" class="str_view html-widget" style="width:600px;height:10px;"&gt;
&lt;/div&gt;
&lt;script type="application/json" data-for="htmlwidget-30"&gt;{"x":{"html":"&lt;ul&gt;\n &lt;li&gt;abc&lt;span class='match'&gt; &lt;\/span&gt;ABC&lt;span class='match'&gt; &lt;\/span&gt;123&lt;span class='match'&gt;\t&lt;\/span&gt;&lt;span class='match'&gt;.&lt;\/span&gt;&lt;span class='match'&gt;!&lt;\/span&gt;&lt;span class='match'&gt;?&lt;\/span&gt;&lt;span class='match'&gt;\\&lt;\/span&gt;&lt;span class='match'&gt;(&lt;\/span&gt;&lt;span class='match'&gt;)&lt;\/span&gt;&lt;span class='match'&gt;{&lt;\/span&gt;&lt;span class='match'&gt;}&lt;\/span&gt;&lt;span class='match'&gt;\n&lt;\/span&gt;&lt;span class='match'&gt; &lt;\/span&gt;abcde&lt;span class='match'&gt; &lt;\/span&gt;aaa&lt;span class='match'&gt; &lt;\/span&gt;bacad&lt;span class='match'&gt; &lt;\/span&gt;&lt;span class='match'&gt;.&lt;\/span&gt;a&lt;span class='match'&gt;.&lt;\/span&gt;aa&lt;span class='match'&gt;.&lt;\/span&gt;aaa&lt;span class='match'&gt; &lt;\/span&gt;abbaab&lt;span class='match'&gt; &lt;\/span&gt;ababcbabcdcbabcde&lt;\/li&gt;\n&lt;\/ul&gt;"},"evals":[],"jsHooks":[]}&lt;/script&gt;
&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td style="text-align:center;min-width: 12em; "&gt;
＼b
&lt;/td&gt;
&lt;td style="text-align:center;min-width: 7em; "&gt;
단어경계
&lt;/td&gt;
&lt;td style="text-align:center;min-width: 10em; "&gt;
see(“\\b”)
&lt;/td&gt;
&lt;td style="text-align:center;min-width: 60em; "&gt;
&lt;div id="htmlwidget-31" class="str_view html-widget" style="width:600px;height:10px;"&gt;
&lt;/div&gt;
&lt;script type="application/json" data-for="htmlwidget-31"&gt;{"x":{"html":"&lt;ul&gt;\n &lt;li&gt;&lt;span class='match'&gt;&lt;\/span&gt;abc&lt;span class='match'&gt;&lt;\/span&gt; &lt;span class='match'&gt;&lt;\/span&gt;ABC&lt;span class='match'&gt;&lt;\/span&gt; &lt;span class='match'&gt;&lt;\/span&gt;123&lt;span class='match'&gt;&lt;\/span&gt;\t.!?\\(){}\n &lt;span class='match'&gt;&lt;\/span&gt;abcde&lt;span class='match'&gt;&lt;\/span&gt; &lt;span class='match'&gt;&lt;\/span&gt;aaa&lt;span class='match'&gt;&lt;\/span&gt; &lt;span class='match'&gt;&lt;\/span&gt;bacad&lt;span class='match'&gt;&lt;\/span&gt; .&lt;span class='match'&gt;&lt;\/span&gt;a&lt;span class='match'&gt;&lt;\/span&gt;.&lt;span class='match'&gt;&lt;\/span&gt;aa&lt;span class='match'&gt;&lt;\/span&gt;.&lt;span class='match'&gt;&lt;\/span&gt;aaa&lt;span class='match'&gt;&lt;\/span&gt; &lt;span class='match'&gt;&lt;\/span&gt;abbaab&lt;span class='match'&gt;&lt;\/span&gt; &lt;span class='match'&gt;&lt;\/span&gt;ababcbabcdcbabcde&lt;span class='match'&gt;&lt;\/span&gt;&lt;\/li&gt;\n&lt;\/ul&gt;"},"evals":[],"jsHooks":[]}&lt;/script&gt;
&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;
&lt;h3 id="특수표현"&gt;특수표현&lt;/h3&gt;
&lt;p&gt; 이 밖에도 정규표현식에서는 &lt;strong&gt;“\[: :\]”&lt;/strong&gt; 형태로 존재하는 특수한 표현식이 존재합니다.&lt;/p&gt;
&lt;table class="table table-striped table-hover table-condensed" style="font-size: 13px; "&gt;
&lt;thead&gt;
&lt;tr&gt;
&lt;th style="text-align:center;"&gt;
［: :］
&lt;/th&gt;
&lt;th style="text-align:center;"&gt;
의미
&lt;/th&gt;
&lt;th style="text-align:center;"&gt;
예시
&lt;/th&gt;
&lt;th style="text-align:center;"&gt;
결과
&lt;/th&gt;
&lt;/tr&gt;
&lt;/thead&gt;
&lt;tbody&gt;
&lt;tr&gt;
&lt;td style="text-align:center;min-width: 5em; "&gt;
［:digit:］
&lt;/td&gt;
&lt;td style="text-align:center;min-width: 10em; "&gt;
숫자
&lt;/td&gt;
&lt;td style="text-align:center;min-width: 15em; "&gt;
see(“［:digit:］”)
&lt;/td&gt;
&lt;td style="text-align:center;min-width: 58em; "&gt;
&lt;div id="htmlwidget-32" class="str_view html-widget" style="width:600px;height:10px;"&gt;
&lt;/div&gt;
&lt;script type="application/json" data-for="htmlwidget-32"&gt;{"x":{"html":"&lt;ul&gt;\n &lt;li&gt;abc ABC &lt;span class='match'&gt;1&lt;\/span&gt;&lt;span class='match'&gt;2&lt;\/span&gt;&lt;span class='match'&gt;3&lt;\/span&gt;\t.!?\\(){}\n abcde aaa bacad .a.aa.aaa abbaab ababcbabcdcbabcde&lt;\/li&gt;\n&lt;\/ul&gt;"},"evals":[],"jsHooks":[]}&lt;/script&gt;
&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td style="text-align:center;min-width: 5em; "&gt;
［:alpha:］
&lt;/td&gt;
&lt;td style="text-align:center;min-width: 10em; "&gt;
문자
&lt;/td&gt;
&lt;td style="text-align:center;min-width: 15em; "&gt;
see(“［:alpha:］”)
&lt;/td&gt;
&lt;td style="text-align:center;min-width: 58em; "&gt;
&lt;div id="htmlwidget-33" class="str_view html-widget" style="width:600px;height:10px;"&gt;
&lt;/div&gt;
&lt;script type="application/json" data-for="htmlwidget-33"&gt;{"x":{"html":"&lt;ul&gt;\n &lt;li&gt;&lt;span class='match'&gt;a&lt;\/span&gt;&lt;span class='match'&gt;b&lt;\/span&gt;&lt;span class='match'&gt;c&lt;\/span&gt; &lt;span class='match'&gt;A&lt;\/span&gt;&lt;span class='match'&gt;B&lt;\/span&gt;&lt;span class='match'&gt;C&lt;\/span&gt; 123\t.!?\\(){}\n &lt;span class='match'&gt;a&lt;\/span&gt;&lt;span class='match'&gt;b&lt;\/span&gt;&lt;span class='match'&gt;c&lt;\/span&gt;&lt;span class='match'&gt;d&lt;\/span&gt;&lt;span class='match'&gt;e&lt;\/span&gt; &lt;span class='match'&gt;a&lt;\/span&gt;&lt;span class='match'&gt;a&lt;\/span&gt;&lt;span class='match'&gt;a&lt;\/span&gt; &lt;span class='match'&gt;b&lt;\/span&gt;&lt;span class='match'&gt;a&lt;\/span&gt;&lt;span class='match'&gt;c&lt;\/span&gt;&lt;span class='match'&gt;a&lt;\/span&gt;&lt;span class='match'&gt;d&lt;\/span&gt; .&lt;span class='match'&gt;a&lt;\/span&gt;.&lt;span class='match'&gt;a&lt;\/span&gt;&lt;span class='match'&gt;a&lt;\/span&gt;.&lt;span class='match'&gt;a&lt;\/span&gt;&lt;span class='match'&gt;a&lt;\/span&gt;&lt;span class='match'&gt;a&lt;\/span&gt; &lt;span class='match'&gt;a&lt;\/span&gt;&lt;span class='match'&gt;b&lt;\/span&gt;&lt;span class='match'&gt;b&lt;\/span&gt;&lt;span class='match'&gt;a&lt;\/span&gt;&lt;span class='match'&gt;a&lt;\/span&gt;&lt;span class='match'&gt;b&lt;\/span&gt; &lt;span class='match'&gt;a&lt;\/span&gt;&lt;span class='match'&gt;b&lt;\/span&gt;&lt;span class='match'&gt;a&lt;\/span&gt;&lt;span class='match'&gt;b&lt;\/span&gt;&lt;span class='match'&gt;c&lt;\/span&gt;&lt;span class='match'&gt;b&lt;\/span&gt;&lt;span class='match'&gt;a&lt;\/span&gt;&lt;span class='match'&gt;b&lt;\/span&gt;&lt;span class='match'&gt;c&lt;\/span&gt;&lt;span class='match'&gt;d&lt;\/span&gt;&lt;span class='match'&gt;c&lt;\/span&gt;&lt;span class='match'&gt;b&lt;\/span&gt;&lt;span class='match'&gt;a&lt;\/span&gt;&lt;span class='match'&gt;b&lt;\/span&gt;&lt;span class='match'&gt;c&lt;\/span&gt;&lt;span class='match'&gt;d&lt;\/span&gt;&lt;span class='match'&gt;e&lt;\/span&gt;&lt;\/li&gt;\n&lt;\/ul&gt;"},"evals":[],"jsHooks":[]}&lt;/script&gt;
&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td style="text-align:center;min-width: 5em; "&gt;
［:lower:］
&lt;/td&gt;
&lt;td style="text-align:center;min-width: 10em; "&gt;
소문자
&lt;/td&gt;
&lt;td style="text-align:center;min-width: 15em; "&gt;
see(“［:lower:］”)
&lt;/td&gt;
&lt;td style="text-align:center;min-width: 58em; "&gt;
&lt;div id="htmlwidget-34" class="str_view html-widget" style="width:600px;height:10px;"&gt;
&lt;/div&gt;
&lt;script type="application/json" data-for="htmlwidget-34"&gt;{"x":{"html":"&lt;ul&gt;\n &lt;li&gt;&lt;span class='match'&gt;a&lt;\/span&gt;&lt;span class='match'&gt;b&lt;\/span&gt;&lt;span class='match'&gt;c&lt;\/span&gt; ABC 123\t.!?\\(){}\n &lt;span class='match'&gt;a&lt;\/span&gt;&lt;span class='match'&gt;b&lt;\/span&gt;&lt;span class='match'&gt;c&lt;\/span&gt;&lt;span class='match'&gt;d&lt;\/span&gt;&lt;span class='match'&gt;e&lt;\/span&gt; &lt;span class='match'&gt;a&lt;\/span&gt;&lt;span class='match'&gt;a&lt;\/span&gt;&lt;span class='match'&gt;a&lt;\/span&gt; &lt;span class='match'&gt;b&lt;\/span&gt;&lt;span class='match'&gt;a&lt;\/span&gt;&lt;span class='match'&gt;c&lt;\/span&gt;&lt;span class='match'&gt;a&lt;\/span&gt;&lt;span class='match'&gt;d&lt;\/span&gt; .&lt;span class='match'&gt;a&lt;\/span&gt;.&lt;span class='match'&gt;a&lt;\/span&gt;&lt;span class='match'&gt;a&lt;\/span&gt;.&lt;span class='match'&gt;a&lt;\/span&gt;&lt;span class='match'&gt;a&lt;\/span&gt;&lt;span class='match'&gt;a&lt;\/span&gt; &lt;span class='match'&gt;a&lt;\/span&gt;&lt;span class='match'&gt;b&lt;\/span&gt;&lt;span class='match'&gt;b&lt;\/span&gt;&lt;span class='match'&gt;a&lt;\/span&gt;&lt;span class='match'&gt;a&lt;\/span&gt;&lt;span class='match'&gt;b&lt;\/span&gt; &lt;span class='match'&gt;a&lt;\/span&gt;&lt;span class='match'&gt;b&lt;\/span&gt;&lt;span class='match'&gt;a&lt;\/span&gt;&lt;span class='match'&gt;b&lt;\/span&gt;&lt;span class='match'&gt;c&lt;\/span&gt;&lt;span class='match'&gt;b&lt;\/span&gt;&lt;span class='match'&gt;a&lt;\/span&gt;&lt;span class='match'&gt;b&lt;\/span&gt;&lt;span class='match'&gt;c&lt;\/span&gt;&lt;span class='match'&gt;d&lt;\/span&gt;&lt;span class='match'&gt;c&lt;\/span&gt;&lt;span class='match'&gt;b&lt;\/span&gt;&lt;span class='match'&gt;a&lt;\/span&gt;&lt;span class='match'&gt;b&lt;\/span&gt;&lt;span class='match'&gt;c&lt;\/span&gt;&lt;span class='match'&gt;d&lt;\/span&gt;&lt;span class='match'&gt;e&lt;\/span&gt;&lt;\/li&gt;\n&lt;\/ul&gt;"},"evals":[],"jsHooks":[]}&lt;/script&gt;
&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td style="text-align:center;min-width: 5em; "&gt;
［:upper:］
&lt;/td&gt;
&lt;td style="text-align:center;min-width: 10em; "&gt;
대문자
&lt;/td&gt;
&lt;td style="text-align:center;min-width: 15em; "&gt;
see(“［:upper:］”)
&lt;/td&gt;
&lt;td style="text-align:center;min-width: 58em; "&gt;
&lt;div id="htmlwidget-35" class="str_view html-widget" style="width:600px;height:10px;"&gt;
&lt;/div&gt;
&lt;script type="application/json" data-for="htmlwidget-35"&gt;{"x":{"html":"&lt;ul&gt;\n &lt;li&gt;abc &lt;span class='match'&gt;A&lt;\/span&gt;&lt;span class='match'&gt;B&lt;\/span&gt;&lt;span class='match'&gt;C&lt;\/span&gt; 123\t.!?\\(){}\n abcde aaa bacad .a.aa.aaa abbaab ababcbabcdcbabcde&lt;\/li&gt;\n&lt;\/ul&gt;"},"evals":[],"jsHooks":[]}&lt;/script&gt;
&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td style="text-align:center;min-width: 5em; "&gt;
［:alnum:］
&lt;/td&gt;
&lt;td style="text-align:center;min-width: 10em; "&gt;
문자+숫자
&lt;/td&gt;
&lt;td style="text-align:center;min-width: 15em; "&gt;
see(“［:alnum:］”)
&lt;/td&gt;
&lt;td style="text-align:center;min-width: 58em; "&gt;
&lt;div id="htmlwidget-36" class="str_view html-widget" style="width:600px;height:10px;"&gt;
&lt;/div&gt;
&lt;script type="application/json" data-for="htmlwidget-36"&gt;{"x":{"html":"&lt;ul&gt;\n &lt;li&gt;&lt;span class='match'&gt;a&lt;\/span&gt;&lt;span class='match'&gt;b&lt;\/span&gt;&lt;span class='match'&gt;c&lt;\/span&gt; &lt;span class='match'&gt;A&lt;\/span&gt;&lt;span class='match'&gt;B&lt;\/span&gt;&lt;span class='match'&gt;C&lt;\/span&gt; &lt;span class='match'&gt;1&lt;\/span&gt;&lt;span class='match'&gt;2&lt;\/span&gt;&lt;span class='match'&gt;3&lt;\/span&gt;\t.!?\\(){}\n &lt;span class='match'&gt;a&lt;\/span&gt;&lt;span class='match'&gt;b&lt;\/span&gt;&lt;span class='match'&gt;c&lt;\/span&gt;&lt;span class='match'&gt;d&lt;\/span&gt;&lt;span class='match'&gt;e&lt;\/span&gt; &lt;span class='match'&gt;a&lt;\/span&gt;&lt;span class='match'&gt;a&lt;\/span&gt;&lt;span class='match'&gt;a&lt;\/span&gt; &lt;span class='match'&gt;b&lt;\/span&gt;&lt;span class='match'&gt;a&lt;\/span&gt;&lt;span class='match'&gt;c&lt;\/span&gt;&lt;span class='match'&gt;a&lt;\/span&gt;&lt;span class='match'&gt;d&lt;\/span&gt; .&lt;span class='match'&gt;a&lt;\/span&gt;.&lt;span class='match'&gt;a&lt;\/span&gt;&lt;span class='match'&gt;a&lt;\/span&gt;.&lt;span class='match'&gt;a&lt;\/span&gt;&lt;span class='match'&gt;a&lt;\/span&gt;&lt;span class='match'&gt;a&lt;\/span&gt; &lt;span class='match'&gt;a&lt;\/span&gt;&lt;span class='match'&gt;b&lt;\/span&gt;&lt;span class='match'&gt;b&lt;\/span&gt;&lt;span class='match'&gt;a&lt;\/span&gt;&lt;span class='match'&gt;a&lt;\/span&gt;&lt;span class='match'&gt;b&lt;\/span&gt; &lt;span class='match'&gt;a&lt;\/span&gt;&lt;span class='match'&gt;b&lt;\/span&gt;&lt;span class='match'&gt;a&lt;\/span&gt;&lt;span class='match'&gt;b&lt;\/span&gt;&lt;span class='match'&gt;c&lt;\/span&gt;&lt;span class='match'&gt;b&lt;\/span&gt;&lt;span class='match'&gt;a&lt;\/span&gt;&lt;span class='match'&gt;b&lt;\/span&gt;&lt;span class='match'&gt;c&lt;\/span&gt;&lt;span class='match'&gt;d&lt;\/span&gt;&lt;span class='match'&gt;c&lt;\/span&gt;&lt;span class='match'&gt;b&lt;\/span&gt;&lt;span class='match'&gt;a&lt;\/span&gt;&lt;span class='match'&gt;b&lt;\/span&gt;&lt;span class='match'&gt;c&lt;\/span&gt;&lt;span class='match'&gt;d&lt;\/span&gt;&lt;span class='match'&gt;e&lt;\/span&gt;&lt;\/li&gt;\n&lt;\/ul&gt;"},"evals":[],"jsHooks":[]}&lt;/script&gt;
&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td style="text-align:center;min-width: 5em; "&gt;
［:punct:］
&lt;/td&gt;
&lt;td style="text-align:center;min-width: 10em; "&gt;
기호
&lt;/td&gt;
&lt;td style="text-align:center;min-width: 15em; "&gt;
see(“［:punct:］”)
&lt;/td&gt;
&lt;td style="text-align:center;min-width: 58em; "&gt;
&lt;div id="htmlwidget-37" class="str_view html-widget" style="width:600px;height:10px;"&gt;
&lt;/div&gt;
&lt;script type="application/json" data-for="htmlwidget-37"&gt;{"x":{"html":"&lt;ul&gt;\n &lt;li&gt;abc ABC 123\t&lt;span class='match'&gt;.&lt;\/span&gt;&lt;span class='match'&gt;!&lt;\/span&gt;&lt;span class='match'&gt;?&lt;\/span&gt;&lt;span class='match'&gt;\\&lt;\/span&gt;&lt;span class='match'&gt;(&lt;\/span&gt;&lt;span class='match'&gt;)&lt;\/span&gt;&lt;span class='match'&gt;{&lt;\/span&gt;&lt;span class='match'&gt;}&lt;\/span&gt;\n abcde aaa bacad &lt;span class='match'&gt;.&lt;\/span&gt;a&lt;span class='match'&gt;.&lt;\/span&gt;aa&lt;span class='match'&gt;.&lt;\/span&gt;aaa abbaab ababcbabcdcbabcde&lt;\/li&gt;\n&lt;\/ul&gt;"},"evals":[],"jsHooks":[]}&lt;/script&gt;
&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td style="text-align:center;min-width: 5em; "&gt;
［:graph:］
&lt;/td&gt;
&lt;td style="text-align:center;min-width: 10em; "&gt;
문자+숫자+기호
&lt;/td&gt;
&lt;td style="text-align:center;min-width: 15em; "&gt;
see(“［:graph:］”)
&lt;/td&gt;
&lt;td style="text-align:center;min-width: 58em; "&gt;
&lt;div id="htmlwidget-38" class="str_view html-widget" style="width:600px;height:10px;"&gt;
&lt;/div&gt;
&lt;script type="application/json" data-for="htmlwidget-38"&gt;{"x":{"html":"&lt;ul&gt;\n &lt;li&gt;&lt;span class='match'&gt;a&lt;\/span&gt;&lt;span class='match'&gt;b&lt;\/span&gt;&lt;span class='match'&gt;c&lt;\/span&gt; &lt;span class='match'&gt;A&lt;\/span&gt;&lt;span class='match'&gt;B&lt;\/span&gt;&lt;span class='match'&gt;C&lt;\/span&gt; &lt;span class='match'&gt;1&lt;\/span&gt;&lt;span class='match'&gt;2&lt;\/span&gt;&lt;span class='match'&gt;3&lt;\/span&gt;\t&lt;span class='match'&gt;.&lt;\/span&gt;&lt;span class='match'&gt;!&lt;\/span&gt;&lt;span class='match'&gt;?&lt;\/span&gt;&lt;span class='match'&gt;\\&lt;\/span&gt;&lt;span class='match'&gt;(&lt;\/span&gt;&lt;span class='match'&gt;)&lt;\/span&gt;&lt;span class='match'&gt;{&lt;\/span&gt;&lt;span class='match'&gt;}&lt;\/span&gt;\n &lt;span class='match'&gt;a&lt;\/span&gt;&lt;span class='match'&gt;b&lt;\/span&gt;&lt;span class='match'&gt;c&lt;\/span&gt;&lt;span class='match'&gt;d&lt;\/span&gt;&lt;span class='match'&gt;e&lt;\/span&gt; &lt;span class='match'&gt;a&lt;\/span&gt;&lt;span class='match'&gt;a&lt;\/span&gt;&lt;span class='match'&gt;a&lt;\/span&gt; &lt;span class='match'&gt;b&lt;\/span&gt;&lt;span class='match'&gt;a&lt;\/span&gt;&lt;span class='match'&gt;c&lt;\/span&gt;&lt;span class='match'&gt;a&lt;\/span&gt;&lt;span class='match'&gt;d&lt;\/span&gt; &lt;span class='match'&gt;.&lt;\/span&gt;&lt;span class='match'&gt;a&lt;\/span&gt;&lt;span class='match'&gt;.&lt;\/span&gt;&lt;span class='match'&gt;a&lt;\/span&gt;&lt;span class='match'&gt;a&lt;\/span&gt;&lt;span class='match'&gt;.&lt;\/span&gt;&lt;span class='match'&gt;a&lt;\/span&gt;&lt;span class='match'&gt;a&lt;\/span&gt;&lt;span class='match'&gt;a&lt;\/span&gt; &lt;span class='match'&gt;a&lt;\/span&gt;&lt;span class='match'&gt;b&lt;\/span&gt;&lt;span class='match'&gt;b&lt;\/span&gt;&lt;span class='match'&gt;a&lt;\/span&gt;&lt;span class='match'&gt;a&lt;\/span&gt;&lt;span class='match'&gt;b&lt;\/span&gt; &lt;span class='match'&gt;a&lt;\/span&gt;&lt;span class='match'&gt;b&lt;\/span&gt;&lt;span class='match'&gt;a&lt;\/span&gt;&lt;span class='match'&gt;b&lt;\/span&gt;&lt;span class='match'&gt;c&lt;\/span&gt;&lt;span class='match'&gt;b&lt;\/span&gt;&lt;span class='match'&gt;a&lt;\/span&gt;&lt;span class='match'&gt;b&lt;\/span&gt;&lt;span class='match'&gt;c&lt;\/span&gt;&lt;span class='match'&gt;d&lt;\/span&gt;&lt;span class='match'&gt;c&lt;\/span&gt;&lt;span class='match'&gt;b&lt;\/span&gt;&lt;span class='match'&gt;a&lt;\/span&gt;&lt;span class='match'&gt;b&lt;\/span&gt;&lt;span class='match'&gt;c&lt;\/span&gt;&lt;span class='match'&gt;d&lt;\/span&gt;&lt;span class='match'&gt;e&lt;\/span&gt;&lt;\/li&gt;\n&lt;\/ul&gt;"},"evals":[],"jsHooks":[]}&lt;/script&gt;
&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td style="text-align:center;min-width: 5em; "&gt;
［:space:］
&lt;/td&gt;
&lt;td style="text-align:center;min-width: 10em; "&gt;
띄어쓰기
&lt;/td&gt;
&lt;td style="text-align:center;min-width: 15em; "&gt;
see(“［:space:］”)
&lt;/td&gt;
&lt;td style="text-align:center;min-width: 58em; "&gt;
&lt;div id="htmlwidget-39" class="str_view html-widget" style="width:600px;height:10px;"&gt;
&lt;/div&gt;
&lt;script type="application/json" data-for="htmlwidget-39"&gt;{"x":{"html":"&lt;ul&gt;\n &lt;li&gt;abc&lt;span class='match'&gt; &lt;\/span&gt;ABC&lt;span class='match'&gt; &lt;\/span&gt;123&lt;span class='match'&gt;\t&lt;\/span&gt;.!?\\(){}&lt;span class='match'&gt;\n&lt;\/span&gt;&lt;span class='match'&gt; &lt;\/span&gt;abcde&lt;span class='match'&gt; &lt;\/span&gt;aaa&lt;span class='match'&gt; &lt;\/span&gt;bacad&lt;span class='match'&gt; &lt;\/span&gt;.a.aa.aaa&lt;span class='match'&gt; &lt;\/span&gt;abbaab&lt;span class='match'&gt; &lt;\/span&gt;ababcbabcdcbabcde&lt;\/li&gt;\n&lt;\/ul&gt;"},"evals":[],"jsHooks":[]}&lt;/script&gt;
&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td style="text-align:center;min-width: 5em; "&gt;
［:blank:］
&lt;/td&gt;
&lt;td style="text-align:center;min-width: 10em; "&gt;
띄어쓰기+탭
&lt;/td&gt;
&lt;td style="text-align:center;min-width: 15em; "&gt;
see(“［:blank:］”)
&lt;/td&gt;
&lt;td style="text-align:center;min-width: 58em; "&gt;
&lt;div id="htmlwidget-40" class="str_view html-widget" style="width:600px;height:10px;"&gt;
&lt;/div&gt;
&lt;script type="application/json" data-for="htmlwidget-40"&gt;{"x":{"html":"&lt;ul&gt;\n &lt;li&gt;abc&lt;span class='match'&gt; &lt;\/span&gt;ABC&lt;span class='match'&gt; &lt;\/span&gt;123&lt;span class='match'&gt;\t&lt;\/span&gt;.!?\\(){}\n&lt;span class='match'&gt; &lt;\/span&gt;abcde&lt;span class='match'&gt; &lt;\/span&gt;aaa&lt;span class='match'&gt; &lt;\/span&gt;bacad&lt;span class='match'&gt; &lt;\/span&gt;.a.aa.aaa&lt;span class='match'&gt; &lt;\/span&gt;abbaab&lt;span class='match'&gt; &lt;\/span&gt;ababcbabcdcbabcde&lt;\/li&gt;\n&lt;\/ul&gt;"},"evals":[],"jsHooks":[]}&lt;/script&gt;
&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;
&lt;div class="callout flex px-4 py-3 mb-6 rounded-md border-l-4 bg-blue-100 dark:bg-blue-900 border-blue-500"
data-callout="note"
data-callout-metadata=""&gt;
&lt;span class="callout-icon pr-3 pt-1 text-blue-600 dark:text-blue-300"&gt;
&lt;svg height="24" xmlns="http://www.w3.org/2000/svg" viewBox="0 0 24 24"&gt;&lt;path fill="none" stroke="currentColor" stroke-linecap="round" stroke-linejoin="round" stroke-width="1.5" d="m16.862 4.487l1.687-1.688a1.875 1.875 0 1 1 2.652 2.652L6.832 19.82a4.5 4.5 0 0 1-1.897 1.13l-2.685.8l.8-2.685a4.5 4.5 0 0 1 1.13-1.897zm0 0L19.5 7.125"/&gt;&lt;/svg&gt;
&lt;/span&gt;
&lt;div class="callout-content dark:text-neutral-300"&gt;
&lt;div class="callout-title font-semibold mb-1"&gt;Note&lt;/div&gt;
&lt;div class="callout-body"&gt;&lt;p&gt;참고로 위의 표에서 사용된 일부 역슬래시와 대괄호는 출력상의 이유로 인해 일반적으로 사용하는 문자가 아닌 특수문자로 대체하였습니다. 예시함수를 사용 할 때 혹시나 에러가 발생한다면 역슬래시와 대괄호를 원래 키로 수정하여 사용하시기 바랍니다.&lt;/p&gt;&lt;/div&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;h3 id="위치-탐색자"&gt;위치 탐색자&lt;/h3&gt;
&lt;p&gt;  다음은 문자를 기준으로 바로 앞뒤 문자를 찾거나 그 반대인 상황을 찾을때 사용하는 표현식입니다.&lt;/p&gt;
&lt;div class="highlight"&gt;&lt;pre tabindex="0" class="chroma"&gt;&lt;code class="language-r" data-lang="r"&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="nf"&gt;see&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="s"&gt;&amp;#39;a(?=c)&amp;#39;&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt; &lt;span class="c1"&gt;# &amp;#39;a&amp;#39;가 &amp;#39;c&amp;#39; 바로 뒤에 있는 경우를 반환 &lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;div id="htmlwidget-41" style="width:960px;height:100%;" class="str_view html-widget"&gt;&lt;/div&gt;
&lt;script type="application/json" data-for="htmlwidget-41"&gt;{"x":{"html":"&lt;ul&gt;\n &lt;li&gt;abc ABC 123\t.!?\\(){}\n abcde aaa b&lt;span class='match'&gt;a&lt;\/span&gt;cad .a.aa.aaa abbaab ababcbabcdcbabcde&lt;\/li&gt;\n&lt;\/ul&gt;"},"evals":[],"jsHooks":[]}&lt;/script&gt;
&lt;div class="highlight"&gt;&lt;pre tabindex="0" class="chroma"&gt;&lt;code class="language-r" data-lang="r"&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="nf"&gt;see&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="s"&gt;&amp;#39;a(?!c)&amp;#39;&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt; &lt;span class="c1"&gt;# &amp;#39;a&amp;#39;가 &amp;#39;c&amp;#39; 바로 뒤따르지 않는 경우를 반환 &lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;div id="htmlwidget-42" style="width:960px;height:100%;" class="str_view html-widget"&gt;&lt;/div&gt;
&lt;script type="application/json" data-for="htmlwidget-42"&gt;{"x":{"html":"&lt;ul&gt;\n &lt;li&gt;&lt;span class='match'&gt;a&lt;\/span&gt;bc ABC 123\t.!?\\(){}\n &lt;span class='match'&gt;a&lt;\/span&gt;bcde &lt;span class='match'&gt;a&lt;\/span&gt;&lt;span class='match'&gt;a&lt;\/span&gt;&lt;span class='match'&gt;a&lt;\/span&gt; bac&lt;span class='match'&gt;a&lt;\/span&gt;d .&lt;span class='match'&gt;a&lt;\/span&gt;.&lt;span class='match'&gt;a&lt;\/span&gt;&lt;span class='match'&gt;a&lt;\/span&gt;.&lt;span class='match'&gt;a&lt;\/span&gt;&lt;span class='match'&gt;a&lt;\/span&gt;&lt;span class='match'&gt;a&lt;\/span&gt; &lt;span class='match'&gt;a&lt;\/span&gt;bb&lt;span class='match'&gt;a&lt;\/span&gt;&lt;span class='match'&gt;a&lt;\/span&gt;b &lt;span class='match'&gt;a&lt;\/span&gt;b&lt;span class='match'&gt;a&lt;\/span&gt;bcb&lt;span class='match'&gt;a&lt;\/span&gt;bcdcb&lt;span class='match'&gt;a&lt;\/span&gt;bcde&lt;\/li&gt;\n&lt;\/ul&gt;"},"evals":[],"jsHooks":[]}&lt;/script&gt;
&lt;div class="highlight"&gt;&lt;pre tabindex="0" class="chroma"&gt;&lt;code class="language-r" data-lang="r"&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="nf"&gt;see&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="s"&gt;&amp;#39;(?&amp;lt;=b)a&amp;#39;&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt; &lt;span class="c1"&gt;# &amp;#39;a&amp;#39;가 &amp;#39;b&amp;#39; 바로 앞에 있는 경우를 반환 &lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;div id="htmlwidget-43" style="width:960px;height:100%;" class="str_view html-widget"&gt;&lt;/div&gt;
&lt;script type="application/json" data-for="htmlwidget-43"&gt;{"x":{"html":"&lt;ul&gt;\n &lt;li&gt;abc ABC 123\t.!?\\(){}\n abcde aaa b&lt;span class='match'&gt;a&lt;\/span&gt;cad .a.aa.aaa abb&lt;span class='match'&gt;a&lt;\/span&gt;ab ab&lt;span class='match'&gt;a&lt;\/span&gt;bcb&lt;span class='match'&gt;a&lt;\/span&gt;bcdcb&lt;span class='match'&gt;a&lt;\/span&gt;bcde&lt;\/li&gt;\n&lt;\/ul&gt;"},"evals":[],"jsHooks":[]}&lt;/script&gt;
&lt;div class="highlight"&gt;&lt;pre tabindex="0" class="chroma"&gt;&lt;code class="language-r" data-lang="r"&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="nf"&gt;see&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="s"&gt;&amp;#39;(?&amp;lt;!b)a&amp;#39;&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt; &lt;span class="c1"&gt;# &amp;#39;a&amp;#39;가 &amp;#39;b&amp;#39; 바로 앞에 있지 않는 경우를 반환 &lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;div id="htmlwidget-44" style="width:960px;height:100%;" class="str_view html-widget"&gt;&lt;/div&gt;
&lt;script type="application/json" data-for="htmlwidget-44"&gt;{"x":{"html":"&lt;ul&gt;\n &lt;li&gt;&lt;span class='match'&gt;a&lt;\/span&gt;bc ABC 123\t.!?\\(){}\n &lt;span class='match'&gt;a&lt;\/span&gt;bcde &lt;span class='match'&gt;a&lt;\/span&gt;&lt;span class='match'&gt;a&lt;\/span&gt;&lt;span class='match'&gt;a&lt;\/span&gt; bac&lt;span class='match'&gt;a&lt;\/span&gt;d .&lt;span class='match'&gt;a&lt;\/span&gt;.&lt;span class='match'&gt;a&lt;\/span&gt;&lt;span class='match'&gt;a&lt;\/span&gt;.&lt;span class='match'&gt;a&lt;\/span&gt;&lt;span class='match'&gt;a&lt;\/span&gt;&lt;span class='match'&gt;a&lt;\/span&gt; &lt;span class='match'&gt;a&lt;\/span&gt;bba&lt;span class='match'&gt;a&lt;\/span&gt;b &lt;span class='match'&gt;a&lt;\/span&gt;babcbabcdcbabcde&lt;\/li&gt;\n&lt;\/ul&gt;"},"evals":[],"jsHooks":[]}&lt;/script&gt;
&lt;hr&gt;
&lt;p&gt; 정리를 하다보니 분량이 꽤나 길어진 것 같습니다. 정규표현식은 비단 R에서 뿐만 아니라 다른 프로그래밍 언어에서도 적극 사용되는 용법이어서 한번 익혀두면 두고두고 써먹을 수 있는 장점이 있는데요. 여기에 소개하지 못한 다른 정규표현식도 많이 존재합니다. 더 자세히 공부를 하고자 하시는 분들을 위한 링크를 밑에 삽입하였으니 참고하시면 도움이 될 수 있겠습니다. R에서 텍스트데이터를 다루는 패키지 중 하나인 &lt;strong&gt;&lt;code&gt;stringr&lt;/code&gt;&lt;/strong&gt; 패키지와 정규표현식을 결합하여 사용하면 더욱 효과적으로 사용할 수 있는데요. 이는 다음장에서 다뤄보도록 하겠습니다.&lt;/p&gt;
&lt;p&gt;
&lt;/p&gt;
&lt;hr&gt;
&lt;h1 id="참고자료"&gt;참고자료&lt;/h1&gt;
&lt;ul&gt;
&lt;li&gt;
&lt;p&gt;
&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;
&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;
&lt;/p&gt;
&lt;/li&gt;
&lt;/ul&gt;</description></item></channel></rss>