用于转换Sweave文件的文本字符串的函数

时间:2014-08-28 08:29:09

标签: r sweave

我认识到Sweave和格式化文本存在很多问题。我读了很多问题和答案,但我仍然无法解决我的问题。

我想做的是使用一些文本创建变量,然后使用函数转换此文本(主要是转义下划线)并在\ Sexpr {}环境中使用它。

我创建了一个简短的测试脚本,但我无法让它工作:

sample_id <- 'CF_0123'
sample_id2 <- 'CF\\_0123'
sample_id4 <- 'CF\\\\_0123'
sample_id2b <- gsub('_','\\_',sample_id)
sample_id4b <- gsub('_','\\\\_',sample_id)
sample_id6b <- gsub('_','\\\\\\_',sample_id)

addBackslash <- function(x) {
  return(gsub('_','\\\\_',x))
}

Sweave('SILAC.Rnw')
tools::texi2dvi('SILAC.tex', pdf = TRUE)

它仅适用于sample_id4和代码块。但是在代码块中它产生了我不想要的新行和其他标记。

有没有办法在R脚本中定义我的纯文本并以某种方式转换它,所以我的sweave文件使用R脚本中的文本和数据。

我的Sweave文件SILAC.Rnw

\documentclass{article}

\begin{document}
\SweaveOpts{concordance=TRUE}
\Sexpr{sample_id}
\Sexpr{sample_id2}
\Sexpr{sample_id4}
\Sexpr{sample_id2b}
\Sexpr{sample_id4b}
\Sexpr{sample_id6b}

\Sexpr{addBackslash(sample_id)}
\Sexpr{(cat(gsub('_','\\\\_',sample_id)))}
test


test2
<<forward, echo=FALSE>>=
  cat(gsub('_','\\\\_',sample_id))
@
test3

\end{document}

生成的.tex文件

\documentclass{article}

\usepackage{Sweave}
\begin{document}
\input{SILAC-concordance}
CF_0123
CF_0123
CF\_0123
CF_0123
CF_0123
CF_0123

CF_0123
\Sexpr{(cat(gsub('_','\\\\_',sample_id)))}
test


test2
\begin{Schunk}
\begin{Soutput}
CF\_0123
\end{Soutput}
\end{Schunk}
test3

\end{document}

1 个答案:

答案 0 :(得分:0)

您可以在块本身中包含文本和文本处理R代码,而不需要使用\Sexpr

可以通过适当的knitr块选项comment=NAresults=asiseval=TRUE

来抑制评论和换行符
require(knitr)

Rnw文件:
另存为(knitr_newline.Rnw)

\documentclass{article}


\begin{document}

test


test2

<<chunk1,message=FALSE,eval=TRUE,results='asis',echo=FALSE,comment=NA>>=

sample_id <- 'CF_0123'
sample_id2 <- 'CF\\_0123'
sample_id4 <- 'CF\\\\_0123'
sample_id2b <- gsub('_','\\_',sample_id)
sample_id4b <- gsub('_','\\\\_',sample_id)
sample_id6b <- gsub('_','\\\\\\_',sample_id)

addBackslash <- function(x) {
    return(gsub('_','\\\\_',x))
}

 cat(gsub('_','\\\\_',sample_id))
@
test3


\end{document}

生成PDF:

knit2pdf('knitr_newline.Rnw')

<强>输出:

enter image description here

这是您正在寻找的输出,请告诉我们......