任务是创建一个文件(word,rtf,pdf,html或其他),它将R的输出(例如:不是创建输出的代码)捕获到该格式(包括文本和图像).
这样做的方式应该是尽可能少地改变原始的R脚本.
如果我只关心文本或图像,那么我会使用?sink,或?pdf.但我不知道如何以简单的方式将两者合二为一.
我知道有一种方法可以使用r2wd导出R输出,但是根据我的口味它在原始代码中涉及太多的介绍(我认为对于sweave解决方案也是如此,尽管我没有经验告诉它)
以下是未来示例的示例代码:
START.text.and.image.recording("output.file") # this is the function I am looking for
x <- rnorm(100)
y <- jitter(x)
print(summary(x))
print(head(data.frame(x,y)))
cor(x,y)
plot(x,y)
print(summary(lm(y~x)))
STOP.text.and.image.recording("output.file") # this is the function I am looking for
Run Code Online (Sandbox Code Playgroud)
更新:我被问到方式不是Sweave,或ReproducibleResearch任务视图中的其他选项.
原因是:
我知道像sweave或brew这样的东西更具可扩展性,但我希望看看是否有更简单的解决方案适用于较小的项目/脚本.
Jer*_*lim 14
截至2012年knitr为这一问题提供了完美的解决方案.
例如,创建一个扩展名为rmd的文件.将代码包装在几个命令中,如下所示:
```{r}
x <- rnorm(100)
y <- jitter(x)
print(summary(x))
print(head(data.frame(x,y)))
cor(x,y)
plot(x,y)
print(summary(lm(y~x)))
```
Run Code Online (Sandbox Code Playgroud)
您可以通过多种方式将其转换为自包含的HTML文件.在RStudio中,您只需按一个按钮即可Knit HTML.这是生成的HTML文件 ; 实际查看HTML在浏览器中的显示方式,保存文件并打开它.
图像代码和输出交织在一起,如您所料.
当然,您可以并且通常会将文件分成多个R代码块.但重点是,你不必.
这是我创建的另外几个例子:
如果您了解 LaTeX,sweave 可能是您最好的选择。odfWeave 是一种类似的机制,但用于将代码嵌入 OpenOffice.org 文件中。对于 HTML,有 R2html 包。但所有这些都可能需要您稍微分解代码才能充分利用系统。或者,您的 sweave/odfweave/html 模板可以在单个代码块中获取脚本的数据生成方面,并print()在需要的地方放置输出显示(语句)。您的图形也可以在脚本中调用,以生成要作为单独文件嵌入到文档中的图形,然后您可以手动将其包含在模板中。
例如(这不是.Rnw一个用于运行的完整文件sweave),在 sweave 文件中,您可以在模板中放置类似的内容,该模板获取 R 脚本的主要部分,该部分将进行分析并生成 R 对象:
<<run_script, eval=TRUE, echo=FALSE, results=hide>>=
source("my_script.R")
@
Run Code Online (Sandbox Code Playgroud)
然后,您需要在想要打印输出的位置插入代码块:
<<disp_output, eval=TRUE, echo=FALSE, results=verbatim>>=
## The results=verbatim is redundant as it is the default, as is eval=TRUE
print(summary(x)) ## etc
@
Run Code Online (Sandbox Code Playgroud)
然后你将需要块来插入数字。
将分析代码与输出(打印和/或图形)分开可能也是一种很好的做法,特别是如果分析代码在计算方面非常昂贵。您可以运行它一次 - 甚至缓存它 - 同时根据需要更新输出/显示代码。
使用 csgillespie 的示例 sweave 文件,我将进行如下设置。首先my_script.R是包含核心分析代码的文件:
x <- rnorm(100)
y <- jitter(x)
corXY <- cor(x,y)
mod.lm <- lm(y~x)
Run Code Online (Sandbox Code Playgroud)
然后是 Sweave 文件
\documentclass[12pt]{article}
\usepackage{Sweave}
\begin{document}
An introduction
<<run_analysis, eval=TRUE,echo=FALSE, results=hide>>=
source("my_script.R")
@
% Later
Here are the results of the analysis
<<show_printed_output, echo=FALSE>>=
summary(x))
head(data.frame(x,y))
@
The correlation between \texttt{x} and \texttt{y} is:
<<print_cor, echo=FALSE>>=
corXY
@
Now a plot
\begin{figure}[h]
\centering
<<echo=FALSE, eval=TRUE, fig=TRUE, width=6, height=4>>=
plot(x,y)
@
\caption{\textit{A nice plot.}}
\end{figure}
\end{document}
Run Code Online (Sandbox Code Playgroud)
你看似想要的东西并不存在;将 R 代码和输出组合到文档文件中的简单方法。如果您不认为 sweave 及其同类简单的话。您可能需要重新考虑您想要做什么或如何安排分析、图形和输出代码,但您可能最好查看建议的选项之一(sweave、odfweave、brew、R2html)。
华泰
我鼓励您使用 Sweave,但是使用sink().
一个普通的txt文件:
sink(file = "test.txt", type = "output")
summary(cars)
sink()
Run Code Online (Sandbox Code Playgroud)
或者添加一些 HTML 标签:
sink(file = "tal_test.html", type = "output")
cat("<!DOCTYPE HTML PUBLIC \"-//W3C//DTD HTML 4.01//EN\"", "\n")
cat("\"http://www.w3.org/TR/html4/strict.dtd\">", "\n")
cat("<HTML>", "\n")
cat("<HEAD>", "\n")
cat("<TITLE>My first HTML document</TITLE>", "\n")
cat("</HEAD>", "\n")
cat("<BODY>", "\n")
summary(cars)
cat("</BODY>", "\n")
cat("</HTML>", "\n")
sink()
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
15563 次 |
| 最近记录: |