0%

Rmarkdown以及Rstudio安装配置debug

问题. Rstudio无法用https正常下载R包

有些服务器会有无法用https访问网站的问题,如:

URL 'https://cran.rstudio.com/src/contrib/PACKAGES.rds': status was 'SSL connect error'

常用的简单方法是在install.packages()增加repos参数来指定安装源(将https变成http),如:

install.packages("ggplot2", repos = "http://cran.rstudio.com")

如果想root权限来安装R包,则:

sudo su - -c "R -q -e \"install.packages('ggplot2', repos='http://cran.rstudio.com/')\""

但有时一些脚本里以被开发者切入了安装R包的代码,这时无法更改代码的前提下,希望能在启动R包时就指定好安装源,可以考虑修改Rprofile.site文件,参考资料:

你可以通过编辑位置初始化文件(Rprofile.site)或者目录初始化文件(.Rprofile)来定制R环境;在启动的时候,R会从R_HOME/etc目录寻找Rprofile.site来调用,其中R_HOME是环境变量,也会从HOME目录或者current project目录寻找.Rprofile文件来调用

可用Sys.getenv("R_HOME")来确定R_HOME的位置,用Sys.getenv("HOME")来确定HOME的位置,以及用getwd()来确定current project目录

如果是要在.Rprofile设置R环境,则需要考虑其在不同位置的优先顺序,其优先级:current project > HOME > R_HOME

对于我这个问题,可以在上述文件中设定repos参数来修改CRAN源

local({
  r <- getOption("repos")
  r["CRAN"] <- "http://cran.rstudio.com/"
  options(repos=r)
})

或者简单点指定一个源

options(repos="http://cran.rstudio.com/")

问题. 如何在root用户下安装Tinytex

最近在服务器上安装Tinytex时发现,首先我的服务器不支持https访问,而Tinytex的安装程序则是从CTAN mirrors下载TeX Live的,针对这种情况可以考虑从CTAN mirrors选择一个镜像,然后用options参数来指定,如:

export CTAN_REPO="http://mirror.las.iastate.edu/tex-archive/systems/texlive/tlnet"

然后按照谢大神写的教程 https://yihui.org/tinytex/#for-other-users来分步安装

wget -qO- "http://yihui.org/gh/tinytex/tools/install-unx.sh" | sh

以上参考:https://github.com/yihui/tinytex/issues/114

接着在安装过程中如果意外中断,或者安装完后报错.TinyTeX/bin/*/tlmgr: not found,一般也是网络问题导致的安装不完全,重新安装即可;比如我们比较常见的pdflatex,如果发现这个not found,则用下述代码检查下确认下是否真的安装了(如果未安装,则会显示""-空),没有的话就重新按照上述步骤再装一遍

# 查看pdflatex的路径
Sys.which('pdflatex')

接着遇到如何用root账户来安装Tinytex呢,相比上述步骤需要再额外加些参数,参考:https://yihui.org/tinytex/faq/

wget -qO- "https://yihui.org/gh/tinytex/tools/install-unx.sh" | sh -s - --admin --no-path
    
sudo ~/.TinyTeX/bin/*/tlmgr path add

其会将TeX Live executables都link到/usr/local/bin以便所有用户使用

如果在rmarkdown使用中发现还缺少某个Tex Live模块,如缺少framed.sty,则通过Tinytex一些函数即可完成安装:

library(tinytex)
tlmgr_search('framed.sty')  # 搜索包含 framed.sty 文件的 LaTeX 包
tlmgr_install('framed')

假如你是用root安装Tinytex,则在后续安装其他模块时会报错:tlmgr_install add_link_dir_dir: destination /usr/local/bin not writable

这时先确定下模块是否已安装,通过下述命令即可列出所有已安装的LeTex模块

tlmgr(c('info', '--list', '--only-installed', '--data', 'name'))

确定后是已安装后,再次用sudo ~/.TinyTeX/bin/*/tlmgr path add即可

如果还遇到其他问题,可参考这篇https://github.com/yihui/tinytex/issues/103,谢大神给了一些debug的方式;还可以查查tinytex FAQ以及tinytex debug


问题. Figure position in markdown when converting to PDF

当在用knitr将rmarkdown导出为PDF的时候,会发现图片位置会默认出现在下一页,并不是按照我们在rmarkdown中所设置的顺序,这个是Latex coding,如要解决可以考虑以下的方式:

  • 选择导出html,因为html没有此限制
  • 在rmarkdown中增加一些参数设置以避免这种情况发生

参考资料:
* Figure position in markdown when converting to PDF with knitr and pandoc * How to hold figure position with figure caption in pdf output of knitr?

针对第二种方法,可分为两种情况:

如有对于图片输出时未设置fig.cap参数,那么增加fig.pos='h'即可

fig.pos
1
plot(cars)

或者在全局中设置

setup, include
1
knitr::opts_chunk$set(echo = FALSE, fig.pos='h')

如果在图片输出时必须包含fig.cap参数用于添加图片名称,那么可以考虑用以下方法,即增加header-includes: \usepackage{float}fig.pos='h'以及在图片输出时加上out.extra='',最后一个必须加上。。。

---
title: "Title"
output:
  pdf_document:       
header-includes: \usepackage{float}
---

setup, include
1
knitr::opts_chunk$set(echo = FALSE, fig.pos='h')
fig.cap
1
plot(cars)

问题. 如何在shiny中下载rmarkdown报告

参照官方模板再略微修改即可,https://shiny.rstudio.com/gallery/download-knitr-reports.html

还可以传变量(比如:data)到rmarkdown中,实现交互生成报告

output$download_outlier_report <- downloadHandler(
  filename = function() {
    paste("test.pdf")
  },
  content = function(file) {
    data <- InputData()
    
    src <- normalizePath("outlierdoc.Rmd")
    owd <- setwd(tempdir())
    on.exit(setwd(owd))
    
    file.copy(src, "template.Rmd", overwrite = TRUE)
    out <- render("template.Rmd", pdf_document())
    file.rename(out, file)
  }
)

本文出自于http://www.bioinfo-scrounger.com转载请注明出处