2017-12-13 10 views
3

私はrmarkdownレポートを作成しました。たくさんのコードチャンクがあります。私は今それのために要約のフロントページを作成していて、RMDファイルの先頭にいるRMarkdown document - 後でチャンクが処理されるまでインラインコードのニット評価を遅らせる方法は?

Blah blah blah summary stuff.... We found the mean to be `r mean(some_object_from_the_report)`. Blah blah blah more summary stuff. 

のようなインライン計算を含めたい、some_object_from_the_reportはまだ存在していません。後の項目がすべて計算されるまで、コードスニペットを評価しないようにknitrに指示する方法はありますか?

ありがとうございました!

EDIT:

提案コメントとしてはknitrオプションで偽エコー=を設定することです。私はそれを間違ってやっているのか、それとも私の状況には役立たない。次の簡単な例はこれを示しています。

--- 
title: "Minimal test of delayed evaluation" 
author: "sff" 
date: "December 13, 2017" 
output: html_document 
--- 

```{r setup, include=TRUE} 
knitr::opts_chunk$set(echo = FALSE) 
``` 

## Summary 

Summary of blahblahblah. Also here's a mean from the report: `r mean(testobj)`. 


## Report 

```{r report_stuff} 
testobj <- c(1, 2, 3) 
``` 

Knitrはオブジェクトが見つかりませんでしたエラーをスローします。私は誤って提案を実装していますか、または私が探しているものを達成できないという提案はありますか?

+3

可能性のある重複した[Rmarkdownプレゼンテーション(slidy)内のコードをエコーする前にチャンクの出力を表示するには?](https://stackoverflow.com/questions/32869378/how-to-display-chunk-output-before -echoing-code-in-rmarkdown-presentation-slidy) – Mako212

+0

チップマコに感謝します。以下の例は、エラーをスローします。リトルヘルプ? ---タイトル: 著者 "遅延評価の最小テスト": "SFF" 日: "2017年12月13日" 出力:html_document --- '' {Rセットアップ、= TRUEを含みます} knitr :: opts_chunk $ set(エコー= FALSE) '' ' ##要約 blahblahblahのまとめ。また、レポートからの平均は 'r mean(testobj)'です。 ## '' '{Rのreport_stuff} testobj <報告 - 私は何をしないのです(、3 1、2) ' '' をCを? – sherifffruitfly

+0

私が通常行っていることは、計算するフィールドを持つ空のリストを作成し、後でスクリプト中に入力してRdataとして保存することです。次回は、このリストを読み込みます。これを行うには、スクリプトを2回実行する必要がありますが、記事の冒頭でサマリーに使用します。 – Cedric

答えて

1

ここでは簡単な例を示します。アブストラクトの前に最初のチャンクを設定します。\graphicspath{}のような他のthigを調整する必要がある場合は、ドキュメントの冒頭に設定できます。

リストを含むRdataファイルが存在しない場合は、このチャンクでリストを作成します。テキスト内で呼び出された値を入力する必要があります。

最初の例を実行しているあなたは、この方法は、あなたが長い計算を実行しないと、単純にその結果を保存することができ

second run

注意を得るセカンドランで first run

を取得します。

\documentclass{article}  
\title{Testing how to save results for the abstract} 
\author{} 
\begin{document} 
% this chunk comes just after begin{document} 
<< init, echo=FALSE, eval=TRUE,results="hide" >>= 
require(knitr) 
summary_list_path <-paste0(getwd(),"/data/summary_list.Rdata") 
if (!file.exists(summary_list_path)){ 
    summary_list<-list() 
    summary_list[["A"]]<-list() 
    summary_list[["B"]]<-list() 
    summary_list[["A"]][["N"]]<-NA 
    summary_list[["A"]][["p"]]<-NA 
    summary_list[["B"]][["text"]]<-"extremely sad" 
} else { 
    load(summary_list_path) 
} 
@ 
\maketitle 
\begin{abstract} 
My population is \Sexpr{summary_list[["A"]][["N"]]} and the p value was \Sexpr{summary_list[["A"]][["p"]]} as a result I am \Sexpr{summary_list[["B"]][["text"]]} 
\end{abstract} 

<<chunk_1, echo=FALSE, eval=TRUE,results="hide" >>= 
summary_list[["A"]][["N"]]<-20 
summary_list[["A"]][["p"]]<-0.05 
# save your list at the end of each chunk, that was you can also avoid 
# processing everyting. 
save(summary_list,file=summary_list_path) 
@ 

<<chunk_2, echo=FALSE, eval=TRUE,results="hide" >>= 
summary_list[["B"]][["text"]]<-"happy" 
save(summary_list,file=summary_list_path) 
@ 

\end{document} 
+0

それを得ました。遅延評価の代替としてのシリアライゼーション具体的な例をありがとう! – sherifffruitfly

関連する問題