【问题标题】:How to display images in Markdown on github generated from knitr without using external image hosting?如何在不使用外部图像托管的情况下在 knitr 生成的 github 上的 Markdown 中显示图像?
【发布时间】:2012-06-29 13:32:34
【问题描述】:

我喜欢将包含多个 R Markdown 和 Markdown 文件的存储库上传到 github。

这是example of such a markdown file on github。这是一个屏幕截图。



问题是图像不显示。您可以单击图像,然后您将转到文件的存储位置。 引用的文件是:
 https://github.com/... /blob/.../myfigure.png

而我认为它需要参考

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

我考虑的事情:

imgur:我可以通过添加以下代码来使用外部图像托管(例如,see this example):

```{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 存储库中的图像?

【问题讨论】:

  • 有一些选项可以使用一些 base64 编码魔法在 html 中嵌入图像,但我不记得我在哪里看到的
  • @baptiste 这对降价有用吗?我的印象是这只适用于 HTML,但我没有仔细观察。
  • 您可以选择在每个生成的文档上运行正则表达式,这会将降价文件中的foo/blob/... 更改为foo/raw/...
  • 如果你愿意,我可以在 Markdown 中对图像进行 base64 编码;只需向我提出问题:github.com/yihui/knitr/issues Markdown 与此处的 HTML 没有什么不同;这只是![](url)<img src='url'> 的问题
  • @JeromyAnglim 我几乎完成了这项工作,但不幸的是,我刚刚意识到 github 在其降价中不支持 base64 编码的图像......叹息。刚刚联系了他们。

标签: r github knitr rstudio


【解决方案1】:

这曾经是最小示例的一部分,使用

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

查看更改 herehere

另见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)

【讨论】:

  • +1 谢谢。我目前正在探索这将如何以一种优雅的方式实际工作,特别是在多个文件夹中有多个 R 降价文件的情况下。将其合并到诸如 makefile 之类的东西中也存在挑战,以便仅在最后添加它,就在推送到 github 之前。当然,如果您在将图像提交到 github 之前添加它,那么您将无法在初步数据分析中看到该图像。
  • 您所要做的就是运行knitbase.url = '',直到您想要推送到github,然后使用github url 进行最终运行。
  • 然后当你想更新代码时,将它返回到base.url='',然后当你更新它时将它改回github base.url,并确保你为每个子文件夹中的每个 R Markdown 文件完美键入所有内容。我同意这并不难,但我仍然认为让它变得优雅和自动化是一项小任务,特别是当你有一个包含许多 R Markdown 文件的存储库时。例如,我有一个包含 20 多个单独的 R Markdown 文件夹的仓库。但我想我开始陷入与我最初提出的问题略有不同的问题。
  • 可能你需要在调用knit.github之后将base_url设置为之前的值?
  • 这个解决方案和下面的一个对我不起作用。例如,我仍然将“R Project Image”视为链接,但没有图像。 github.com/RickPack/AnalyticsForward_2019/blob/master/…
【解决方案2】:

markdown 文件开头的以下代码呢?

``` {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 报告 gitrepgitbranch。在这里,我假设我是主 git 存储库目录下的一个目录级别。同样,这可能会被调整以适应更复杂的场景。

我在github上测试过,这里是Rmd文件和对应的md文件。

【讨论】:

  • +1 谢谢。我认为这样的东西将是一个很好的构建块,作为某种类型的 makefile 的一部分,并且可能是一个 sed 脚本来根据需要插入这个命令。
  • 什么时候不需要呢?我假设您只想查看 github 上的图表 only
猜你喜欢
  • 2012-10-14
  • 1970-01-01
  • 1970-01-01
  • 2011-12-17
  • 2010-11-18
  • 1970-01-01
  • 1970-01-01
  • 2023-03-29
  • 2015-08-03
相关资源
最近更新 更多