分享

一个Sweave 的简单实例(R 和 LaTeX)

 geoallan 2022-12-12 发布于四川
  •  R语言
  • 一个Sweave 的简单实例(R 和 LaTeX)

下面是 Sweave 的一个例子,如果你有 R 和 LaTeX 使用经验,将很轻松就会了解它的用法:

将这个例子拷贝到一个文件(建议没有后缀),在 R 中使用 Sweave 编译。即可在工作区域生成供使用的 LaTeX 源码和供使用的绘图(ps和pdf)。



PS:

不太喜欢 Emacs 下面的noweb模式,故……


\documentclass[CJK]{cctart}<br />
\usepackage{verbatim}<br />
\title{Sweave 实例}<br />
\author{}<br />
\date{}<br />
\SweaveOpts{echo=FALSE}<br />
<br />
\begin{document}<br />
<br />
\maketitle<br />
<br />
使用 Sweave 可以很容易地将 \LaTeX{} 同 R 的代码混排文档转化为可<br />
编译的 \LaTeX{} 文档。<br />
<br />
在这种混排的文档里,基本机构仍然是 \LaTeX{} 形式的,唯一的区别是,<br />
R 代码需要放置在以 $<<>>=$ 为开头,$@$为结尾的段落里面。开头部分<br />
有两个常用的参数:echo和fig,使用逻辑值分别表示是否将 R 代码输入<br />
作为 \LaTeX{} 文本输出;是否在 \LaTeX{} 文档中绘制图形。<br />
这篇文档只需要在 R 中编译一遍,即可形成\LaTeX{}需要的输出(文件)。<br />
<<echo = TRUE>>=<br />
require(stats)<br />
## Student's paired t-test<br />
m <- t.test(extra ~ group, data = sleep, paired = TRUE)<br />
print(m)<br />
@<br />
R 中的运算结果很容易插入到标准文档,<br />
比如\texttt{sleep}数据的配对t检验结果<br />
中的$p$-value是\Sexpr{format.pval(m$p.value)};<br />
或者是直接运算<br />
<<echo=TRUE,results=hide>>=<br />
choose(49,6)<br />
@<br />
美国威力球(类似于福彩双色球)的理论组合数等于\Sexpr{choose(49,6)}。<br />
<br />
R 代码中可以随意写注释,但这些注释默认不会被输出。如果要求输出注释,<br />
抱歉,现在还没有更好的解决办法。<br />
<br />
使用 Sweave 还可以将 R 生成的图形加入到 \LaTeX{} 文档中,而不必事先<br />
做出 \LaTeX{} 需要的图形文件\footnote{Sweave会自动生成ps和pdf图形}。<br />
下图是关于Titanic号根据海难中人员的经济状况、性别、年龄和是否存活四<br />
个变量绘制的马赛克图:<br />
<br />
<<fig=TRUE,echo=FALSE>>=<br />
require(graphics)<br />
mosaicplot(Titanic, main = "Survival on the Titanic")<br />
@<br />
<br />
\end{document}
很好很好,基本的功能都有了:)



另:不知道大家是否都清楚utils包中的Sweave()函数。
5 个月 后
十分感谢,的确很方便。



btw:众里寻她千百度,蓦然回首,此帖灯火阑珊处……快顶起来。



[quote]引用第0楼bjt2007-11-27 09:02发表的“一个Sweave 的简单实例(R 和 LaTeX)”:

R 代码中可以随意写注释,但这些注释默认不会被输出。如果要求输出注释,

抱歉,现在还没有更好的解决办法。



.......[/quote]



在latex中,

\begin{lstlisting}[language=R]



\end{lstlisting}

中间将R程序加进去,注释会照样输出的(中文字符除外)。



如果设置了\lstset{numbers=left,basicstyle=\footnotesize,numberstyle=\tiny,

keywordstyle=\color{blue!70},commentstyle=\color{red!50!green!50!blue!50}, frame=shadowbox,rulesepcolor=\color{red!20!green!20!blue!20},escapeinside='',

xleftmargin=2em,xrightmargin=2em, aboveskip=1em}



那么输出的程序不仅支持高亮显示,而且还可以将中文置于''之间,能得到需要的中文注释。



另外,Sweave输出的程序很难看,怎样自己设置得到漂亮的输出,请指教。
1 个月 后
Sweave 在\documentclass[CJK]{beamer}里面好像不能用,请问这是为什么?
[quote]引用第5楼陈放2008-06-02 21:33发表的“”:

Sweave 在documentclass[CJK]{beamer}里面好像不能用,请问这是为什么?[/quote]

应该可以用吧。

按理说,Sweave编译过的 tex 文档可以通用。它没有改变 tex 的结构。
[quote]引用第4楼cloud_wei2008-04-19 13:09发表的“”:





在latex中,

begin{lstlisting}[language=R]



.......[/quote]

呵呵, RFAQ就是用的这个环境。
我用的是 \documentclass[CJK]{beamer}

再这种情况下根本不认命令

\usepackage{C:/PROGRA~1/R/R-27~1.0/share/texmf/Sweave}
[quote]引用第9楼陈放2008-06-05 08:30发表的“”:

我用的是 documentclass[CJK]{beamer}

再这种情况下根本不认命令

usepackage{C:/PROGRA~1/R/R-27~1.0/share/texmf/Sweave}[/quote]



latex不认这样的路径的.
在article下是认的,就是在benmer下不认,同时在beamer下listing宏包也不认
4 天 后
我问的问题已经解决,

1,在beamer中不认usepackage{C:/PROGRA~1/R/R-27~1.0/share/texmf/Sweave}

  是因为中间可能省略,我把Sweave.sty拷到一个路径较简单的地方就行了,

现在我用的是\usepackage{C:/newfile/Sweave}就没有问题;

2,在beamer中用listings package时在 要在begin{frame}后加上命令[containsverbatim]

比如:

\begin{frame}[containsverbatim]

\frametitle{1、R Latex } \textbf{1、Sweave 函数的应用}

\begin{lstlisting}[language=R, keywordstyle=\color{blue!70}\bfseries,

commentstyle=\color{red!50!green!50!blue!50}, escapeinside=``,

basicstyle=\normalsize]

testfile<-as.character("listings")

options(device.ask.default=FALSE)

Sweave(testfile)

Stangle(testfile)

\end{lstlisting}

\vskip 2cm

\end{frame}

就没有问题了
2 年 后
7 天 后

回复 第15楼 的 DavidLung:LaTeX找不到这个样式文件,如果你用Windows,它的位置在file.path(R.home(), 'share', 'texmf', 'Sweave.sty'),在当前的R版本(2.11.1)下,你需要手工把这个文件(或者所有texmf下的文件)拷贝到LaTeX的宏包路径下再刷新MikTeX数据库,如果你用的是MikTeX的话。

回复 第1楼 的 刘思喆:

注释可以输出,如果仅仅想输出某个代码框的注释

<<keep.source=TRUE>>=

就可以显示了

放在\SweaveOpts{}里作为宏应该所有都会显示

还有如果在代码框中用df$value的方式latex会出现识别错误(进入数学模式),需要在代码框后加一个%$来抵消数学mode,当然这可能是ess自己的问题。。

4 天 后

回复 第16楼 的 谢益辉:不好意思,对你的回答仍不太明白:

1.LaTeX的宏包路径在哪?我装在c盘

2.如何刷新MikTeX数据库?

回复 第18楼 的 DavidLung:

1、宏包的路径一般在 CTeX安装路径\MiKTeX\tex\latex\,那里你可以看到很多包;虽然把文件直接复制到这里并不是好办法,但我见你似乎并不熟悉MikTeX,就先这样办吧

2、从开始菜单中找到MikTeX的设置菜单(MikTeX在CTeX菜单的下一级),有个Refresh FNDB的按钮即是

回复 第19楼 的 谢益辉:我这只有把所有texmf下的文件拷贝后,问题才解决,谢谢。 

    本站是提供个人知识管理的网络存储空间,所有内容均由用户发布,不代表本站观点。请注意甄别内容中的联系方式、诱导购买等信息,谨防诈骗。如发现有害或侵权内容,请点击一键举报。
    转藏 分享 献花(0

    0条评论

    发表

    请遵守用户 评论公约

    类似文章 更多