Как отображать изображения в Markdown на github, созданные из knitr без использования внешнего хостинга?

Мне нравится загружать репозитории в github, которые включают несколько файлов R Markdown и Markdown.

Вот пример такого файла уценки в github. И вот захват экрана.


enter image description here


Проблема в том, что изображения не отображаются. Вы можете щелкнуть по изображению, и вы перейдете к тому, где хранится файл. Ссылка на файл:
 https://github.com/... /blob/.../myfigure.png

тогда как я предполагаю, что ему нужно ссылаться на

 https://github.com/... /raw/.../myfigure.png

Что я подумал:

imgur: Я мог бы использовать внешний хостинг изображений (например, см. этот пример), добавив следующий код:

```{r setup}
opts_knit$set(upload.fun = imgur_upload) # upload all images to imgur.com
````

Однако по разным причинам я не хочу этого делать (у меня проблема с загрузкой, когда позади брандмауэра, она медленная, она создает ненужную зависимость)

Rpubs: Там также RPubs, что довольно круто. Тем не менее, во время публикации он больше подходит для отдельных документов с уценкой, а не для нескольких документов с разметкой R. И он не обеспечивает такую ​​тесную связь между источником R Markdown и документом Markdown.

Вопрос

  • Есть ли рабочий процесс для использования R Markdown и knitr для создания файлов Markdown, которые при загрузке в github позволяют файлу Markdown отображать изображения, хранящиеся в репозитории github?

Ответы

Ответ 1

Это было частью минимального примера, используйте

opts_knit$set(base.url='https://github.com/.../raw/.../')

См. изменения здесь и здесь.

Также см. http://yihui.name/knitr/options.

EDIT [с обновлением для восстановления base.url до прежнего значения

Что касается переключения, вы можете определить функцию как

create_gitpath <- function(user, repo, branch = 'master'){
   paste0(paste('https://github.com', user, repo, 'raw', branch, sep = '/'),'/')
}

my_repo <- create_gitpath(user, repo)

knit.github <- function(..., git_url  ){
 old_url <- opts_knit$get('base.url')
 on.exit(opts_knit$set(base.url = old_url))
 opts_knit$set(base.url  = git_url)
 knit(..., envir = parent.frame())
}

Запустите с помощью knit, пока вы не нажмете на github, затем запустите knit.github(..., git_url = my_repo)

Ответ 2

Как насчет следующего кода в начале вашего файла уценки?

``` {r setup,echo=FALSE,message=FALSE}
gitsubdir <- paste(tail(strsplit(getwd(),"/")[[1]],1),"/",sep="")
gitrep <- "https://github.com/mpiktas/myliuduomenis.lt"
gitbranch <- "master"
opts_knit$set(base.url=paste(gitrep,"raw",gitbranch,gitsubdir,sep="/"))
```

Можно настроить его так, чтобы gitrep и gitbranch сообщается с помощью git. Здесь я предположил, что я один уровень каталога ниже основного каталога репозитория git. Опять же, это может быть изменено для размещения более сложных сценариев.

Я тестировал github, вот файл Rmd и соответствующий md.