메뉴 닫기

티스토리 블로그를 위한 R 팩키지

이전 티스토리 블로그에 R코드 하이라이팅 적용하기에서 필자가 티스토리 블로그에서의 R코드 하이라이팅을 위한 세팅하는 방법에 대하여 다룬 적이 있다. 이번 포스팅에서는 지극히 필자의 개인적인 용도(공부 및 일일이 함수 로드하는 귀차니즘번거로움 제거)로 만들어본 R4Tistory라는 팩키지 사용법을 다뤄보고자 한다.
티스토리 블로그에서의 R코드 하이라이팅을 제대로 하기 위해서는, html 결과물의 R코드 태그 클래스 이름을 Prism.js에서 사용하는 “language-r” 태그를 적용하는게 좋다. 자세한 사항은 위의 링크를 참고하자.
따라서 티스토리용 plain html파일 Rmarkdown 세팅 후 knitr의 결과물로 나온 html파일의 코드 태그 클래스를 ctrl+F로 찾아서 바꿔주기만 하면 끝이지만, 다음의 두 가지 이유에서 R4Tistory 팩키지를 만들게 되었다.

    1. 매번 결과물을 찾아 바꿔주는 것이 너무 불편하다.
    1. 매번 티스토리에 접속해서 글 올리는 것도 너무 귀찮다.

1번의 경우는 현재 팩키지가 가지고 있는 knitr4blog함수로 해결이 가능하게 되었다. 2번 문제는 앞으로 티스토리 API를 열심히 공부해서 팩키지에 티스토리 아이디와 비번을 입력값으로 한 함수형태로 만들어서 넣는게 현재 목표이자, 이 팩키지를 시작하게된 진짜 목적이다. (1번 문제 혹은 코드 하이라이팅에 관한 훨씬 편한 해결책을 알고 계신 분은 언제든지 의견주세요.)

R4Tistory 설치

R4Tistory는 현재 필자의 github에 올려져있기 때문에 devtools를 이용하여 설치를 하면 된다. 또한 패키지가 결국 rmarkdown을 살짝 변형한 것이기 때문에 rmarkdown팩키지 역시 없다면 설치하도록 하자.

install.packages("devtools")
install.packages("rmarkdown")
devtools::install_github("issactoast/R4Tistory")

만약 devtools와 rmarkdown이 설치되어 있다면, 마지막 명령어를 실행하면 팩키지가 설치될 것이다.

사용법

knitr4blog 함수는 티스토리에서 R코드 하이라이팅을 위한 Rmd 파일을 세팅한 후, 설정된 세팅에 맞게 knitting을 해주는 기능을 가지고 있다. 이 함수를 사용하는 방법은 다음의 4단계를 거치면 된다.

  1. 블로그에 올릴 Rmd 파일을 준비한다. 단, 파일의 이름에는 공백이 없어야 하고, 혹은 공백 대신 밑줄(_)을 사용하자. 예: your_file.Rmd
  2. Rmd 파일의 헤더는 다음과 같이 설정해준다. 이것은 knitr을 한 후의 결과 html을 최대한 서식이 없는 파일이 되도록 하기 위함이다. 자세한 사항은 관련 포스팅을 참고하자.
title: "제목"
output:
  html_document:
    self_contained: TRUE
    keep_md: FALSE
    theme: NULL
    highlight: NULL
  1. 파일이 위치한 폴더를 워킹 디렉토리로 설정 한 뒤(혹은 파일 주소를 통하여), 다음의 명령어를 사용해서 Rmd파일을 knitting 해준다.
library(R4Tistory)
knitr4blog("yourfile.Rmd")
  1. 결과물로 나온 파일을 브라우져에서 열기-> 소스코드 보기를 통하여 보여기는 html 소스 코드를 복사하여 자신의 티스토리 블로그에 html로 작성하기를 글쓰기 란에 그대로 붙여 넣으면 된다. 문단 간격없음을 체크 해제하면 훨씬 보기 좋다.(이 마지막 4단계는 추후 함수를 통하여 자동화 하려고 합니다.)

소스코드 설명

R4Tistory 패키지는 knitr4blog()와 change_codeclass() 함수 두 가지로 구성되어 있다. (시작은 미약하나 그 끝은 창대하리라.)
knitr4blog() 함수의 경우는 rmarkdown 패키지의 render()함수를 불러와 knitting을 해준 후, 결과물인 html파일을 change_codeclass() 함수에 넣어주는 역할을 한다. 단, 파일 이름에 공백이 있을 경우 knitr에서 공백을 밑줄로 바꿔버려서 그냥 공백 허용을 하지 않도록 이름 체크 기능을 넣었다.

knitr4blog <- function(fileName, className = "language-r"){
  if (length(grep(" ", fileName)) != 0) {
    warning("your fileName has blank, please use '_' instead of the blank. ex: 'file_name.Rmd'")
    return(NA)
  } else {
    render(fileName)
    change_codeclass(paste0(gsub(".Rmd","", fileName),".html"),
                     className)
  }
}

change_codeclass() 함수가 하는 일은 주어진 html파일은 읽어온 후 pre class = "r" 부분을 찾아 원하는 클래스 이름으로 바꿔 줄 뿐이다.

change_codeclass <- function(fileName, className){
  myweb <- readLines(fileName)
  myweb <- gsub("pre class=\"r\"",
                paste0("pre class=\"", className,"\""),
                myweb)
  myweb <- paste(as.character(myweb), collapse = "\n")
  write.table(myweb,
              file = fileName,
              quote = FALSE,
              col.names = FALSE,
              row.names = FALSE)
}

SHARE TO

출처: http://issactoast.com/70 [Anyone can learn anything.]

40 Comments

  1. g with

    I got this web page from my buddy who informed me concerning this website and at the moment this time I
    am visiting this site and reading very informative articles or reviews at this place.

  2. http://directory.themixup2.com

    Right here is the right blog for everyone who wishes to find out about this topic.
    You know so much its almost hard to argue with you (not that I actually will need to…HaHa).

    You definitely put a fresh spin on a subject which has been written about for many years.

    Great stuff, just wonderful!

  3. Sanford Fini

    I simply want to tell you that I am newbie to weblog and absolutely savored you’re website. Most likely I’m going to bookmark your website . You surely come with incredible stories. Regards for sharing with us your blog.

  4. cannabidol

    I was suggested this website by my cousin. I am not sure whether this post is written by him as nobody else know such detailed about my trouble. You are wonderful! Thanks!Nice blog here! Also your web site loads up fast! What web host are you using? Can I get your affiliate link to your host? I wish my website loaded up as quickly as yours lol

  5. get more

    After research study a few of the article on your internet site currently, as well as I truly like your means of blog writing. I bookmarked it to my bookmark internet site checklist and will certainly be checking back quickly. Pls have a look at my website as well and also let me understand what you think.

  6. hemp fields farm 300mg cbd-rich dog treats

    Can I simply state what a relief to find someone that in fact recognizes what theyre talking about online. You absolutely understand just how to bring an issue to light as well as make it important. Even more people need to read this and also understand this side of the story. I cant think youre not a lot more popular because you certainly have the gift.

  7. can humans take dog cbd oil

    Wonderful article. I discover something more difficult on various blog sites everyday. It will certainly constantly be stimulating to review material from various other authors and exercise a little something from their shop. I?d choose to utilize some with the web content on my blog site whether you don?t mind. Natually I?ll provide you a link on your web blog site. Thanks for sharing.

  8. website hosting companies

    I know this if off topic but I’m looking into starting my own blog and was curious what
    all is needed to get set up? I’m assuming having a
    blog like yours would cost a pretty penny? I’m
    not very internet smart so I’m not 100% sure. Any tips
    or advice would be greatly appreciated. Thank you

  9. the full details

    The following time I read a blog site, I hope that it does not dissatisfy me as long as this one. I indicate, I know it was my choice to review, yet I in fact believed youd have something interesting to claim. All I hear is a number of yawping concerning something that you can take care of if you werent also active searching for interest.

  10. see this website

    Youre so cool! I do not mean Ive read anything like this prior to. So good to discover someone with some initial thoughts on this subject. realy thank you for starting this up. this internet site is something that is needed online, somebody with a little creativity. helpful job for bringing something brand-new to the net!

  11. see it here

    I?m impressed, I must state. Truly rarely do I encounter a blog site that?s both educative and also enjoyable, as well as let me tell you, you have actually hit the nail on the head. Your concept is outstanding; the problem is something that inadequate individuals are talking wisely about. I am very delighted that I came across this in my look for something relating to this.

댓글 남기기

이메일은 공개되지 않습니다.