2010-04-21 44 views
4

我正在寫一個Sweave文檔,我想包括一個小節,詳細介紹R和包的版本,平臺以及ti用來評估doucment的時間,但是,我想把它放在文檔的中間!在Sweave/R中評估表達式之前是否可以包含Sexpr?

我正在使用一個\ Sexpr {elapsed}來做到這一點(這並沒有奏效),但是我想如果我把代碼打印已經過去了,最後在一個塊中進行評估,那麼我可以包含塊的一半通過,這也失敗了。

我的文件看起來像這樣

% 
\documentclass[a4paper]{article} 
\usepackage[OT1]{fontenc} 
\usepackage{longtable} 
\usepackage{geometry} 
\usepackage{Sweave} 
\geometry{left=1.25in, right=1.25in, top=1in, bottom=1in} 
\begin{document} 

<<label=start, echo=FALSE, include=FALSE>>= 
startt<-proc.time()[3] 
@ 
Text and Sweave Code in here 
% 
This document was created on \today, with \Sexpr{print(version$version.string)} running 
on a \Sexpr{print(version$platform)} platform. It took approx sec to process. 
<<>>= 
    <<elapsed>> 
@ 
More text and Sweave code in here 
<<label=bye, include=FALSE, echo=FALSE>>= 
odbcCloseAll() 
endt<-proc.time()[3] 
elapsedtime<-as.numeric(endt-startt) 
@ 
<<label=elapsed, include=FALSE, echo=FALSE>>= 
print(elapsedtime) 
@ 
\end{document} 

但這似乎並沒有工作(令人驚訝!)

有誰知道我怎麼能這樣做呢?

謝謝

保羅。

回答

3

這只是正常的我:

\documentclass{article} 
\usepackage{Sweave} 
\begin{document} 

<<label=start, echo=FALSE, include=FALSE>>= 
startt<-proc.time()[3] 
@ 

Text and Sweave Code in here 

This document was created on \today, with 
\Sexpr{print(version$version.string)}. 

<<results=hide,echo=FALSE>>= 
Sys.sleep(2) # instead of real work 
@ 

More text and Sweave code in here 

<<label=bye, include=FALSE, echo=FALSE>>= 
endt<-proc.time()[3] 
elapsedtime<-as.numeric(endt-startt) 
@ 

It took approx \Sexpr{elapsedtime} seconds to process. 

\end{document} 

我有我得到通過x86_64然後打亂LaTeX的下劃線刪除\Sexp{}內部版本字符串。否則就好了,你現在得到的時間剛好超過睡眠數量。

您可以使用R將經過的時間緩存在臨時文件中以供下次運行,或者將它作爲某種變量傳遞給LaTeX--但是您將無法使用「前向引用」作爲R塊依次進行評估。

2

順便說一句,你通常不需要打印評估變量R

\Sexpr{version$version.string} 

正常工作以及

2

德克的回答幾乎是完美的,但仍然沒有讓你把答案中途該文件。我非常沮喪地認爲它應該工作,但意識到我的代碼是在每次運行開始時打開時間文件(並清空它)並將空的結果寫入我的文檔,然後將時間文件中的答案放在結束 !

我最終做了類似的事情,但是使用R來打開並在最後寫入文件,這很好用!

\documentclass[a4paper]{article} 
\usepackage[OT1]{fontenc} 
\usepackage{longtable} 
\usepackage{geometry} 
\usepackage{Sweave} 
\geometry{left=1.25in, right=1.25in, top=1in, bottom=1in} 
\begin{document} 

<<label=start, echo=FALSE, include=FALSE>>= 
startt<-proc.time()[3] 
@ 
Text and Sweave Code in here 
% 
This document was created on \today, with \Sexpr{print(version$version.string)} running 
on a \Sexpr{print(version$platform)} platform. It took approx \input{time} 
sec to process. 

More text and Sweave code in here 
<<label=bye, include=FALSE, echo=FALSE>>= 
odbcCloseAll() 
endt<-proc.time()[3] 
elapsedtime<-as.numeric(endt-startt) 
@ 
<<label=elapsed, include=FALSE, echo=FALSE>>= 
fileConn<-file("time.tex", "wt") 
writeLines(as.character(elapsedtime), fileConn) 
close(fileConn) 
@ 
\end{document}