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

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

Вот пример такого файла уценки на github. А вот и скриншот.


введите здесь описание изображения


Проблема в том, что изображения не отображаются. Вы можете нажать на изображение, и вы перейдете туда, где хранится файл. Упомянутый файл:

 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?

person Jeromy Anglim    schedule 28.06.2012    source источник
comment
есть некоторая возможность вставлять изображения в html, используя магию кодирования base64, но я не могу вспомнить, где я это видел   -  person baptiste    schedule 28.06.2012
comment
@baptiste работает ли это для уценки? У меня сложилось впечатление, что это работает только для HTML, но я не смотрел внимательно.   -  person Jeromy Anglim    schedule 28.06.2012
comment
При желании вы можете запустить регулярное выражение для каждого сгенерированного документа, которое изменит foo/blob/... на foo/raw/... в файлах уценки.   -  person daroczig    schedule 28.06.2012
comment
@JeromyAnglim, вы понимаете, что вы можете включить необработанный html в уценку   -  person baptiste    schedule 28.06.2012
comment
Я могу кодировать изображения base64 в уценке, если хотите; просто напишите мне о проблеме: github.com/yihui/knitr/issues Markdown ничем не отличается с HTML здесь; это просто вопрос ![](url) или <img src='url'>   -  person Yihui Xie    schedule 28.06.2012
comment
Спасибо @Yihui. Вот проблема github.com/yihui/knitr/issues/298   -  person Jeromy Anglim    schedule 29.06.2012
comment
@JeromyAnglim Я почти закончил работу, но, к сожалению, только что понял, что github не поддерживает изображения в кодировке base64 в их уценке ... вздох. Только что связался с ними.   -  person Yihui Xie    schedule 08.07.2012


Ответы (2)


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

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

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

См. также http://yihui.name/knitr/options.

ИЗМЕНИТЬ [с обновлением для восстановления прежнего значения 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)

person mnel    schedule 28.06.2012
comment
+1 спасибо. В настоящее время я изучаю, как это будет работать элегантным образом, особенно если у вас есть несколько файлов уценки R в нескольких папках. Также существует проблема включения его в что-то вроде make-файла, чтобы он добавлялся только в самом конце, непосредственно перед отправкой на github. Естественно, если вы добавите его до того, как зафиксируете изображение на github, вы не сможете увидеть изображение в предварительном анализе данных. - person Jeromy Anglim; 28.06.2012
comment
Все, что вам нужно сделать, это запустить knit с base.url = '', пока вы не захотите отправить на github, а затем использовать URL-адрес github для окончательного запуска. - person mnel; 28.06.2012
comment
а затем, когда вы хотите обновить код, верните его обратно в base.url='', а затем, когда вы обновите его, измените его обратно на github base.url и убедитесь, что вы правильно вводите все для каждого файла R Markdown. в каждой подпапке. Я согласен, что это не так сложно, но я все же думаю, что есть небольшая задача сделать его элегантным и автоматизированным, особенно когда у вас есть репозиторий со многими файлами R Markdown. Например, у меня есть одно репо с более чем 20 отдельными папками R Markdown. Но я предполагаю, что начинаю переходить к немного другому вопросу, чем тот, который я изначально задал. - person Jeromy Anglim; 28.06.2012
comment
Возможно, вам нужно установить base_url в его предыдущее значение после вызова knit.github? - person mpiktas; 02.07.2012
comment
Это решение и приведенное ниже не сработали для меня. Например, я все еще вижу R Project Image как ссылку, но не изображение. github.com/RickPack/AnalyticsForward_2019/blob/master/ - person Rick Pack; 11.03.2019
comment
Я решил проблему, используя расширение PNG с большой буквы. Переименование файла на моем жестком диске не решило проблему. Github по-прежнему показывал расширение с заглавной буквы с первого раза, когда я выталкивал файлы. - person Rick Pack; 11.03.2019

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

``` {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="/"))
```

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

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

person mpiktas    schedule 28.06.2012
comment
+1 спасибо. Я думаю, что что-то подобное было бы хорошим строительным блоком как часть некоторого типа make-файла и, возможно, сценария sed для вставки этой команды по мере необходимости. - person Jeromy Anglim; 28.06.2012
comment
А когда не нужен? Я предполагаю, что вы хотите посмотреть графики только на github? - person mpiktas; 28.06.2012