4

私は Sweave ドキュメントを書いています。R とパッケージのバージョン、プラットフォーム、およびドキュメントの評価にかかった時間を詳述する小さなセクションを含めたいのですが、これをドキュメントの真ん中に置きたいです!

これを行うために \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}

しかし、これはうまくいかないようです(驚くべきことに!)

誰も私がこれを行う方法を知っていますか?

ありがとう

ポール。

4

3 に答える 3

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}

\Sexp{}アンダースコアを取得すると、x86_64LaTeXが混乱するため、バージョン文字列を削除する必要がありました。それ以外の場合は問題なく、スリープ状態をわずかに超える経過時間が得られます。

R を使用して、次の実行のために経過時間を一時ファイルにキャッシュするか、それを何らかの変数として LaTeX に渡すことができますが、R チャンクが評価されるため、「前方参照」を使用することはできません。順番。

于 2010-04-21T16:23:13.110 に答える
2

Dirk の答えはほぼ完璧ですが、それでも文書の途中まで答えを入れることはできません。私はそれがうまくいくはずだと思ってかなりイライラしましたが、私が持っていたコードは、各実行の開始時に時間ファイルを開き (そしてそれを空にし)、空の結果をドキュメントに書き込んでから、時間ファイルに答えを入れていたことに気付きました.終わり !

私は最終的に似たようなことをしましたが、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}
于 2010-04-23T08:13:35.023 に答える
2

ところで、通常、変数Rを評価するために印刷する必要はありません

\Sexpr{version$version.string}

正常に動作します

于 2010-04-21T16:33:02.680 に答える