2012-12-10 85 views
11

我正在嘗試爲R Markdown文件寫一個Jekyll轉換器。我創建了RMarkdownConverter.rb,並將其放在我的_plugins目錄中。我已經證實其他插件正在工作,但這不是。我也看不到任何錯誤信息,包括我自己提供的信息。看來這沒有被使用。但是,Jekyll正在爲我的.Rmd文件生成一個HTML文件,但只是將R卡盤處理爲代碼卡盤。任何幫助或想法將不勝感激。Jekyll Converter for R Markdown

RMarkdownConverter.rb文件:

module Jekyll 
    class RMarkdownConverter < Converter 
     safe true 
     priority :low 

    def setup 
     STDERR.puts "Setting up R Markdown..." 
     return if @setup 
     require 'rinruby' 
     @setup = true 
    rescue 
     STDERR.puts 'do `gem install rinruby`' 
     raise FatalException.new("Missing dependency: rinruby") 
    end 

     def matches(ext) 
      ext =~ /Rmd/i 
     end 

     def output_ext(ext) 
      '.html' 
     end 

     def convert(content) 
     setup 
     STDERR.puts "Using R Markdown..." 
     R.eval "require(knitr)" 
     R.eval "render_markdown(strict=TRUE)" 
     R.assign "content", content 
     STDERR.puts content 
     R.eval "out <- knit(text=content)" 
     R.eval "print(out)" 
     end 
    end 
end 

我的第一個R降價後的內容:

--- 
layout: post 
title: Using (R) Markdown, Jekyll, and Github for Blogging 
published: true 
tags: R R-Bloggers Jekyll github 
type: post 
status: publish 
--- 

First, we need to install [RinRuby](https://sites.google.com/a/ddahl.org/rinruby-users/) to call R from Ruby. In the terminal, execute: 

    gem install rinruby 

First R chuck: 

```{r} 
2 + 2 
``` 

回答

4

嘗試用以下

R.assign "content", content 
R.eval "knitr::render_markdown(strict = TRUE)" 
R.pull "(knitr::knit2html(text = content, fragment.only = TRUE))" 

將最後幾行,我認爲你需要R.pull將R輸出的內容複製到Ruby。此外,我會建議直接從Rmd轉換爲HTML。我已經成功地與Ruhoh合作,這是另一個基於ruby的博客平臺。

UPDATE。這很奇怪,但使用擴展rmd似乎與md衝突。我將它隨機更改爲ram,jekyll似乎正確地選擇了它。我不知道爲什麼。

+0

它也出現,如果你添加'markdown_ext:markdown'到'_config.yml',Jekyll會處理'rmd'文件。但是,這也意味着'md'文件不會被處理。對我來說不是什麼大問題,因爲我一直在使用'.markdown'文件擴展名。 – jbryer

+0

應該有一種方法可以在不調用已知速度較慢的'rinruby'的情況下執行此操作。我正在探索如何直接使用shell命令來處理Rmd文件,但是knitr使用的反引號會使shell執行失敗。 – Ramnath