2016-08-04 2 views
0

SConsknitr을 사용하여 .Rmd 개의 파일에서 보고서를 생성하는 최소 또는 더 큰 작업 예제가 있습니까? 커맨드 라인 (bash 쉘)을 .html 파일을 도출로부터 cleaning_session.Rmd 파일을 보내고knitr과 함께 SCons를 사용하는 예제

knit 통해 수행 될 수있다 :이 example에서

Rscript -e "library(knitr); knit('cleaning_session.Rmd')". 

, RSCRIPT 및 사용은 Make 파일로 공급된다

RMDFILE=test 

html : 
    Rscript -e "require(knitr); require(markdown); knit('$(RMDFILE).rmd', '$(RMDFILE).md'); markdownToHTML('$(RMDFILE).md', '$(RMDFILE).html', options=c('use_xhtml', 'base64_images')); browseURL(paste('file://', file.path(getwd(),'$(RMDFILE).html'), sep='' 

이 대답 https://stackoverflow.com/a/10945832/1172302에는 SCons를 사용하는 솔루션이 있다고합니다. 그러나, 나는 그것이 나를 위해 일할만큼 충분히 시험하지 않았다. 기본적으로 https://tex.stackexchange.com/a/26573/8272에 표시된 예제와 같은 것을 사용하는 것이 좋습니다.

+1

'.Rmd' 파일을 TeX/LaTeX로 변환하는 명령이 어떻게 보이는지 알려줄 수 있습니까? 그런 다음 https://bitbucket.org/scons/scons/wiki/ToolsForFools의 조언에 따라이 명령을 '명령'또는 적절한 빌더로 변환 한 다음 생성 된 TeX 파일을 다음과 같이 참조하십시오. 원본을 PDF 작성기로 보냅니다. SCons는 나머지 부분을 처리해야합니다. – dirkbaechle

+0

@dirkbaechle 올바른 문서를 가리켜 주셔서 감사합니다. 시간이 지나면 나는 더 정교한 것을 만들려고 노력할 것입니다. –

답변

1

[업데이트 하나 일 예는 Sconstruct 파일입니다

  • knit라는 사용자 정의 스크립트를 호출 첫 번째 빌더

    import os 
    environment = Environment(ENV=os.environ) 
    
    # define a `knitr` builder 
    builder = Builder(action = '/usr/local/bin/knit $SOURCE -o $TARGET', 
            src_suffix='Rmd') 
    
    # add builders as "Knit", "RMD" 
    environment.Append(BUILDERS = {'Knit' : builder}) 
    
    # define an `rmarkdown::render()` builder 
    builder = Builder(action = '/usr/bin/Rscript -e "rmarkdown::render(input=\'$SOURCE\', output_file=\'$TARGET\')"', 
         src_suffix='Rmd') 
    
    environment.Append(BUILDERS = {'RMD' : builder}) 
    
    # define source (and target files -- currently useless, since not defined above!) 
    
    # main cleaning session code 
    environment.RMD(source='cleaning_session.Rmd', target='cleaning_session.html') 
    
    # documentation of the Cleaning Process 
    environment.Knit(source='Cleaning_Process.Rmd', target='Cleaning_Process.html') 
    
    # documentation of data 
    environment.Knit(source='Code_Book.Rmd', target='Code_Book.html') 
    
    . 이 파일은 대상 파일/확장자를 처리합니다. 여기서는 cleaning_session.html입니다. 이 예제에서 suffix 매개 변수가 모두 필요하지는 않은 것으로 보입니다.

  • 두 번째 빌더이 추가 된 파일은 Rscript -e "rmarkdown::render(\'$SOURCE\')"'입니다.

  • Command wrapper의 예에서와 같이 SCons은 대상 파일이 이미 존재하는 경우 작업을 반복하지 않도록합니다.

(소스 나는 현재 검색 할 수 없습니다) 사용자 정의 스크립트입니다 :

#!/usr/bin/env Rscript 

local({ 
    p = commandArgs(TRUE) 
    if (length(p) == 0L || any(c('-h', '--help') %in% p)) { 
    message('usage: knit input [input2 input3] [-n] [-o output output2 output3] 
    -h, --help  to print help messages 
    -n, --no-convert do not convert tex to pdf, markdown to html, etc 
    -o    output filename(s) for knit()') 
    q('no') 
    } 

    library(knitr) 
    o = match('-o', p) 
    if (is.na(o)) output = NA else { 
    output = tail(p, length(p) - o) 
    p = head(p, o - 1L) 
    } 
    nc = c('-n', '--no-convert') 
    knit_fun = if (any(nc %in% p)) { 
    p = setdiff(p, nc) 
    knit 
    } else { 
    if (length(p) == 0L) stop('no input file provided') 
    if (grepl('\\.(R|S)(nw|tex)$', p[1])) { 
     function(x, ...) knit2pdf(x, ..., clean = TRUE) 
    } else { 
     if (grepl('\\.R(md|markdown)$', p[1])) knit2html else knit 
    } 
    } 

    mapply(knit_fun, p, output = output, MoreArgs = list(envir = globalenv())) 
}) 

있는 유일한 방법은, 지금은 필요가 scons를 실행하는 것입니다.

관련 문제