R 编程/出版质量输出
您可以使用 format()
函数来控制显示对象的位数和其他特征。
> df <- data.frame(x = rnorm(10), y = rnorm(10))
> print(df)
x y
1 -0.4350953 -0.6426477
2 -0.5947293 -0.2389625
3 -0.7061850 -2.4382016
4 -0.3384038 -0.6322842
5 0.2713353 0.5396409
6 -1.1144711 -2.0321274
7 -1.0356184 1.7217443
8 -2.6665278 -0.3621377
9 0.2975570 0.1598905
10 1.4631458 -0.7995652
> print(format(df, digits=3, scientific=T))
x y
1 -4.35e-01 -6.43e-01
2 -5.95e-01 -2.39e-01
3 -7.06e-01 -2.44e+00
4 -3.38e-01 -6.32e-01
5 2.71e-01 5.40e-01
6 -1.11e+00 -2.03e+00
7 -1.04e+00 1.72e+00
8 -2.67e+00 -3.62e-01
9 2.98e-01 1.60e-01
10 1.46e+00 -8.00e-01
Sweave[1] 是一种文学化编程语言,它将 LaTeX 和 R 代码集成在一起。Sweave 文件会生成一个 LaTeX 文件和一个 R 文件,这两个文件可以被编译。Roger Koenker[2]、Meredith 和 Racine (2009)[3] 以及 Charles Geyer[4] 认为 Sweave 有利于可重复的计量经济学/统计学研究。
对于文学化编程,Sweave 有一些替代方法。其中之一是 Babel,它包含在 Emacs Orgmode[5] 中。该工具允许导出到 LaTeX 和 HTML。它还允许包含用于各种编程语言(R、Ruby 等)的代码块。
主要思想是编写一个包含 LaTeX 和 R 代码的文件。LaTeX 代码以@开头,R 代码以<<>>=开头(一些选项可以包含在<<和>>).
@
% Some LaTeX code
\section{Results}
I show that ...
<<>>=
# Some R code
qnorm(.975)
@
% Some LaTeX code
$$
\Phi^{-1}(.975) = 1.96
$$
之间)。该文件以扩展名.Rnw或.rnw. 最后,您使用以下命令从该文件提取 R 文件Stangle()以及使用以下命令提取 LaTeX 文件Sweave(). 以下是一个名为file.Rnw的文件示例,它生成file.tex和file.R
> Sweave("file.Rnw")
Writing to file file.tex
Processing code chunks ...
1 : echo keep.source term verbatim pdf
2 : echo keep.source term verbatim pdf
> Stangle("file.Rnw")
Writing to file file.R
然后,您可以对您的 file.tex 运行 LaTeX。这可以使用以下命令完成system()函数或texi2dvi().
# Example under Windows :
system("pdflatex.exe -shell-escape file.tex") # runs pdflatex
system("open file.pdf") # opens the pdf
请注意,您可能需要从互联网下载 Sweave.sty,因为它不是标准 MikTeX 发行版的一部分。
您还可以使用以下命令在文本中添加结果\Sexpr{}函数。
$
\Phi^{-1}(.975) = \Sexpr{qnorm(.975)}
$
选项
[edit | edit source]有一些选项。这些选项可以包含在每个代码块中或在 Sweave 命令中。
- 对于图形,您可以使用以下命令将其包含在 tex 文件中fig=T或使用以下命令将其排除在外fig=F.
默认情况下,图形以 pdf 和 eps 文件形式导出。如果您只需要一种格式,请使用以下命令抑制另一种格式pdf=F或eps=F选项。
- R 代码可以使用以下命令显示在 tex 文件中echo=T. 如果您不想将其包含在 tex 文件中,请使用echo=F.
- R 代码可以使用以下命令进行评估eval=T. 如果您不想评估 R 代码,请使用eval=F.
- 结果
- results=tex将输出视为 LaTeX 代码
- results=verbatim将输出视为 Verbatim(默认值)
- results=hide不在 LaTeX 输出中包含结果
这些选项可以传递给Sweave()函数。
Sweave("file.Rnw", pdf = T, eps=F, echo = F, results = "verbatim")
它们也可以传递给每个代码块。
<<fig=T,pdf=T,eps=F>>=
plot(rnorm(100), col = "red")
@
Sweave 的文本编辑器
[edit | edit source]Sweave 的主要问题是很少有文本编辑器包含对 Sweave 的语法高亮显示功能。以下是一些例外
- RStudio 是一款非常好的解决方案。它易于安装和使用,并包含运行 Sweave 文件的按钮。
- Vim 为 Sweave 文件提供语法高亮显示 (R no web syntax)
- Emacs + ESS (Emacs Speaks Statistics) 为 Sweave 文件提供完全支持。它包括运行 Sweave 文件的键盘快捷键和在 LaTeX 和 R 之间切换的语法高亮显示。
- Eclipse StatET 插件为 Sweave (LaTeX/R) 文档提供支持,其中包含所有基本功能(语法高亮显示、括号匹配、切换注释等),并能检测到 R 代码块。
另请参见
[edit | edit source]一些 Sweave 文档示例
- Charles Geyer foo.Rnw 示例
- Julien Barnier 的 R 入门(法语文档)
- 技巧 : 输入filetype:Rnw或filetype:Snw在 Google 中搜索以获取 Sweave 文件
- 请注意,您可以在 R 库文件夹中浏览以找到大量示例。文档通常使用 Sweave 编写,并且 Sweave 文件通常包含在包中。例如,请参阅 **np** 包中的 doc 文件夹。
一些讲义
- "用 Sweave 和 DOCSTRIP 进行文学编程" (pdf) 作者:Michael Lundholm
- Charles Geyer 2008 "Sweave 演示" (pdf)(简短)
- 用 APA 风格学习 Sweave[6]
一些软件包
- pgfSweave 包
- ascii 包
- cacheSweave
- exam 自动生成试卷
一些替代文学编程包
- odfWeave 包,用于使用 OpenOffice 进行 Sweave。
- knitr 包
- decumar,由 Hadley Wickham 开发的 R 文学编程界面[7]
- relax 包
- wikirobot[8] 与 Sweave 类似,但适用于 MediaWiki。
Pubprint
[edit | edit source]Pubprint 是一款小型实用程序,能够将统计检验的输出转换为可发表的输出。Pubprint 能够将输出导出为多种格式(HTML、LaTeX、Markdown 和纯文本),但不幸的是仅支持 APA 风格(美国心理学会的出版风格)。然而,这种风格被广泛使用,并且可能在更多情况下适用。
示例
[edit | edit source]> library("pubprint")
> pprint(t.test(rnorm(30), rnorm(30)))
[1] "(\\ensuremath{M\\ifmmode_{x}\\else\\textsubscript{x}\\fi=-0.05,M\\ifmmode_{y}\\else\\textsubscript{y}\\fi=0.09,t[57.74]=-0.49,p=.628})"
显然,pubprint 打印的是 LaTeX 格式的字符串,但可以更改输出格式(根据手册,pubprint 旨在与 knitr 一起使用,如果与 knitr 一起使用,它会自动检测输出格式)
> pp_opts_out$set(pp_init_out("plain"))
> pprint(t.test(rnorm(30), rnorm(30)))
[1] "(M_x=-0.14,M_y=-0.24,t[57.4]=0.41,p=.682)"
> pprint(cor.test(rnorm(30), rnorm(30)))
[1] "(r=-.08,p=.693)"
输出可以粘贴到文档中,也可以包含在 knitr/sweave 中\Sexpr{}语句。
导出到 LaTeX
[edit | edit source]R 具有许多函数,允许它将结果导出到 LaTeX[9]。
通用函数
[edit | edit source]toLatex()位于 **utils** 包中。
- 请注意toLatex()不处理矩阵。
- toLatex()已在 **memisc** 包中进行修改,以处理矩阵和 ftables。
> toLatex(sessionInfo())
\begin{itemize}
\item R version 2.2.0, 2005-10-06, \verb|powerpc-apple-darwin7.9.0|
\item Base packages: base, datasets, grDevices,
graphics, methods, stats, utils
\end{itemize}
- mat2tex()(**sfsmisc**)将矩阵导出到 LaTeX。
- tex.table()(**cwhmisc**)包将数据框导出到 LaTeX 表格。
> tex.table(mydat)
\begin{table}[ht]
\begin{center}
\begin{footnotesize}
\begin{tabular}{r|rrr}
\hline
& y & x1 & x2\\ \hline
1 & -0.09 & -0.37 & -1.04\\
2 & 0.31 & 0.19 & -0.09\\
3 & 3.78 & 0.58 & 0.62\\
4 & 2.09 & 1.40 & -0.95\\
5 & -0.18 & -0.73 & -0.54\\
6 & 3.16 & 1.30 & 0.58\\
7 & 2.78 & 0.34 & 0.77\\
8 & 2.59 & 1.04 & 0.46\\
9 & -1.96 & 0.92 & -0.89\\
10 & 0.91 & 0.72 & -1.1\\
\hline
\end{tabular}
\end{footnotesize}
\end{center}
\end{table}
- xtable()(**xtable**)将各种对象(包括表格、数据框、lm、aov 和 anova)导出到 LaTeX。
> # lm example
> library(xtable)
> x <- rnorm(100)
> y <- 2*x + rnorm(100)
> lin <- lm(y~x)
> xtable(lin)
% latex table generated in R 2.15.1 by xtable 1.7-0 package
% Sun Sep 23 21:54:04 2012
\begin{table}[ht]
\begin{center}
\begin{tabular}{rrrrr}
\hline
& Estimate & Std. Error & t value & Pr($>$$|$t$|$) \\
\hline
(Intercept) & -0.0407 & 0.0984 & -0.41 & 0.6803 \\
x & 2.0466 & 0.1043 & 19.63 & 0.0000 \\
\hline
\end{tabular}
\end{center}
\end{table}
> # table example
> x <- sample(1:10, 30, replace = T)
> tab <- table(x)
> tab <- cbind(tab, prop.table(tab))
> colnames(tab) <- c("N.", "Prop.")
> xtable(tab, digits = c(0, 0, 2))
% latex table generated in R 2.15.1 by xtable 1.7-0 package
% Sun Sep 23 22:06:36 2012
\begin{table}[ht]
\begin{center}
\begin{tabular}{rrr}
\hline
& N. & Prop. \\
\hline
1 & 5 & 0.17 \\
3 & 1 & 0.03 \\
4 & 3 & 0.10 \\
5 & 6 & 0.20 \\
6 & 5 & 0.17 \\
7 & 3 & 0.10 \\
8 & 2 & 0.07 \\
9 & 2 & 0.07 \\
10 & 3 & 0.10 \\
\hline
\end{tabular}
\end{center}
\end{table}
另请参见
- 由 Romain François 开发的 **highlight** 包将 R 代码导出到 LaTeX 和 HTML。
- format.df()和latex()位于 **Hmisc** 包中。
- **MEMISC** 和 **quantreg** 包包含其他latex()函数。
描述性统计
[edit | edit source]- estout 包。
- reporttools 包包含一些用于描述性统计表格的函数[10]。
估计结果
[edit | edit source]- stargazer 包提供了一种将回归结果导出到 LaTeX 的简便方法[11]
- texreg 提供了相同的功能[12]。
- estout 包提供了与 Stata 的类似函数esttab和estout实用程序[13]。估计值使用以下命令存储eststo()并使用以下命令打印esttab(). 它们可以导出到 CSV 和 LaTeX。这些函数支持lm, glm和plm对象(请参阅 **plm** 包)。
- apsrtable()(**apsrtable**)将多个回归的结果导出到 LaTeX,其方式类似于《美国政治科学评论》出版标准。
- 该xtable(**xtable** 包)导出数据框、矩阵、估计结果[14]。xtable()也可以用于将结果导出到 HTML 文件。
- 由 Paul Johnson 开发的 outreg() 函数[15] 与 Stataoutreg[16] 函数相似。请参阅 "R you ready ?" 博文,了解此主题的信息。
- mtable()和toLatex()位于 'memisc 包中。
N <- 10^3
u <- rnorm(N)
x1 <- rnorm(N)
x2 <- x1 + rnorm(N)
y <- 1 + x1 + x2 + u
lm1 <- lm(y ~ x1 + x2 )
lm2 <- lm(y ~ x1 + x2 + I(x1*x2))
library(estout)
estclear() # clear all the eststo objects
eststo(lm1)
eststo(lm2)
esttab() # print it
library("apsrtable")
apsrtable(lm1,lm2)
library(xtable)
xtable(lm1)
tab <- xtable(lm1)
print(tab,type="html")
source("http://pj.freefaculty.org/R/WorkingExamples/outreg-worked.R")
outreg(list(lm1,lm2))
library("memisc")
toLatex(mtable(lm1,lm2))
导出到 HTML
[edit | edit source]rpublisher[17] 是一种文学编程语言,它将结果发布为 HTML 格式(它基于 python,最后更新于 2008 年)。
参见 R2HTML、xtable、hwriter、prettyR、highlight、HTMLUtils
wiki.table()在 hacks 包中,将矩阵或数据框导出到 Mediawiki 表格标记(如本维基和其他许多维基中使用的那样)。
> wiki.table(matrix(1:16,4),caption="Test")
{|
|+ Test
| 1 || 5 || 9 || 13
|-
| 2 || 6 || 10 || 14
|-
| 3 || 7 || 11 || 15
|-
| 4 || 8 || 12 || 16
|}
- ↑ Sweave 主页 http://www.stat.uni-muenchen.de/~leisch/Sweave/
- ↑ http://www.econ.uiuc.edu/~roger/repro.html
- ↑ Meredith, E. 和 J.S. Racine (2009),“迈向可复制计量经济学研究:Sweave 框架”,《应用计量经济学杂志》,第 24 卷,第 366-374 页。
- ↑ Charles Geyer "为什么可复制研究是正确的" http://www.stat.umn.edu/~charlie/Sweave/
- ↑ Emacs Orgmode 中的 Babel http://orgmode.org/worg/org-contrib/babel/intro.html
- ↑ Ista Zahn学习使用 APA 风格的 Sweave,《PracTeX 杂志》2008 年,第 1 期
- ↑ decumar git 存档 : http://github.com/hadley/decumar
- ↑ wikirobot http://r-forge.r-project.org/projects/wikirobot/
- ↑ 如果您想了解 LaTeX,请参见 LaTeX Wikibook
- ↑ reporttools:用于生成描述性统计的 LaTeX 表格的 R 函数
- ↑ http://www.r-statistics.com/2013/01/stargazer-package-for-beautiful-latex-tables-from-r-statistical-models-output/
- ↑ http://www.r-bloggers.com/texreg-a-package-for-beautiful-and-easily-customizable-latex-regression-tables-from-r/
- ↑ estout : http://repec.org/bocode/e/estout/
- ↑ xtable 在 dataninja 博客上的介绍
- ↑ outreg() 函数 http://pj.freefaculty.org/R/WorkingExamples/outreg-worked.R
- ↑ Stata outreg http://ideas.repec.org/c/boc/bocode/s375201.html
- ↑ rpublisher : http://code.google.com/p/rpublisher/