从RMarkdown Code Chunk

时间:2017-02-17 23:41:41

标签: r latex knitr r-markdown

我想在报告的顶部打印一个小标题。它最终应该是这样的:

enter image description here

该报告由RMarkdown / Knitr报告生成。我在Latex中混合以获得我需要的格式。数据基于我通过从REST查询中提取结果生成的表。 R中的数据框如下所示:

enter image description here

我编写了LaTex代码以获得我想要的结果,并且显示为:

\begin{spacing}{.7}
\begin{center}
ECC \begin{tabular}{|C|C|} \hline \cellcolor{red} \textbf{\scriptsize \textcolor{white}{TOUCH}} & \textbf{\scriptsize NO TOUCH} \\ \hline \end{tabular} \hspace{.9em}
DOC \begin{tabular}{|C|C|} \hline \textbf{\scriptsize TOUCH} & \textbf{\scriptsize NO TOUCH} \\ \hline \end{tabular} \hspace{.9em}
CCC \begin{tabular}{|C|C|} \hline \textbf{\scriptsize TOUCH} & \textbf{\scriptsize NO TOUCH} \\ \hline \end{tabular} \hspace{.9em}
GEN \begin{tabular}{|C|C|} \hline \textbf{\scriptsize TOUCH} & \textbf{\scriptsize NO TOUCH} \\ \hline \end{tabular} \hspace{.9em}
IT \begin{tabular}{|C|C|} \hline \textbf{\scriptsize TOUCH} & \textbf{\scriptsize NO TOUCH} \\ \hline \end{tabular} \hspace{.9em}
\end{center}
\end{spacing}

到目前为止,这么好。但是文本和单元格颜色的着色需要是动态的。标准如下:

  1. 如果环境是"触摸"环境,该单元格应为绿色,文本为白色。
  2. 如果环境是" No Touch"环境,该单元格应为红色,文本为白色。
  3. 每个部分未着色的单元格应为白色背景和黑色文本。
  4. 不是很难,我在报告中创建了一个包含在\being{center}\begin{spacing}{.7}项内的代码块,如下所示:

    ```{r echo = FALSE, warning = FALSE, message=FALSE, results='asis'}
    # Add row to data frame to build table options
    touchNoTouchDF$tableOption <- NA
    
    for(i in 1:nrow(touchNoTouchDF)) {
      if(strsplit(touchNoTouchDF[i,1], ":")[[1]][2] == "Touch") {
        touchNoTouchDF[i,2] <- paste(strsplit(touchNoTouchDF[i,1], ":")[[1]][1],"\\begin{tabular}{|C|C|} \\hline \\cellcolor{OliveGreen!85} \\textbf{\\scriptsize \\textcolor{white}{TOUCH}} \& \\textbf{\\scriptsize NO TOUCH} \\newline \\hline \\end{tabular} \\hspace{.9em}")
      } else {
        touchNoTouchDF[i,2] <- paste(strsplit(touchNoTouchDF[i,1], ":")[[1]][1],"\\begin{tabular}{|C|C|} \\hline \\textbf{\\scriptsize TOUCH} \& \\cellcolor{red} \\textbf{\\scriptsize \\textcolor{white}{NO TOUCH}} \\newline \\hline \\end{tabular} \\hspace{.9em}")
      }
    }
    
    for(i in 1: nrow(touchNoTouchDF)) {
      print(touchNoTouchDF[i,2])
    }
    ```
    

    我在这里做的是根据第一列包含的内容,在该数据框的不同列中生成正确的LaTex代码。运行for循环后,我得到你上面看到的数据框。到目前为止,非常好。现在是我的问题所在。我想让那个R代码块打印LaTex所以它被渲染。我认为我简单的循环与print语句将工作,没有骰子。我试过cat(),但也没用。

    我对如何打印出最后一行的内容感到困惑,因此生成的pdf报告包含该图形表示。有任何想法吗?提示?我确信这很简单,但我已经在这里工作了几个小时,谷歌有各种各样的方式......提前致谢!

    编辑:

    根据要求,下面是我得到的输出。我确保使用cat(),如果我手动运行它,将LaTex打印到控制台没有问题。当我尝试编织文档时,我得到以下内容:

    ! Misplaced \noalign.
    \hline ->\noalign 
                      {\ifnum 0=`}\fi \let \hskip \vskip \let \vrule \hrule \let...
    l.143 ...tbf{\scriptsize NO TOUCH} \newline \hline
    
    pandoc.exe: Error producing PDF
    Error: pandoc document conversion failed with error 43
    In addition: Warning messages:
    1: package 'knitr' was built under R version 3.3.2 
    2: package 'prettyR' was built under R version 3.3.2 
    3: package 'magick' was built under R version 3.3.2 
    4: running command '"C:/Users/z10987/AppData/Local/Pandoc/pandoc" +RTS -K512m -RTS pdfReport.utf8.md --to latex --from markdown+autolink_bare_uris+ascii_identifiers+tex_math_single_backslash --output pdfReport.pdf --template "C:\R\R-3.3.1\library\rmarkdown\rmd\latex\default-1.17.0.2.tex" --highlight-style tango --latex-engine xelatex --include-in-header header1.tex --variable graphics=yes' had status 43 
    Execution halted
    

    我想,也许是因为我没有逃过&#34;&amp;&#34;在表中,但当我尝试时,我得到了:

    Error: \& is an unrecognized escape character in string...
    

    再次感谢!

    更新:

    我想出来了 - 在表格中,最初,在每一行的末尾有一个\\。我试图通过\\\逃避这一点,这给了我一个错误。我决定,因为我认为\\是换行符,所以我只需将其替换为\\newline。我想你必须在表的末尾有\\,否则它不喜欢它。

    所以...我把\\放进去了。现在,我仍然有逃避它的问题。只是一时兴起,我想,好吧,&#34;如果一个\逃脱另一个\,也许我需要两个,一个逃避每个反斜杠......&#34;我将\\替换为\\\\并瞧!有效。呃,这么简单的事情....我想为此发布解决方案。

1 个答案:

答案 0 :(得分:1)

全部 - 发布一个正式答案,我的错误是认为我可以用一个“\”来逃避“\”,因此,我粘贴到我的字符串“\\”。但是,因为每个“\”必须被转义。我不得不逃避第一个“\”然后第二个“\”,因此最终以“\\”结束。第一个逃脱第二个,第三个逃脱第四个。可能是一些基本的东西,但如果你不注意,这是一个容易的疏忽。只是想为别人发布答案。