2017-11-15 4 views
0

文書のRチャンクによって生成された文字列を再評価する必要がありますか?デモの目的のためには、以下の文書を検討してください。rmarkdown:再帰的なチャンク評価?

test 

How to get “params[[‘B’]]” evaluated here? This “r params[['B']]” is expected to be “test” … 

が、私がしたい:

test 

How to get “params[[‘B’]]” evaluated here? This “test” is expected to be “test” … 

答えて

2

あなたはknitrはRを処理するために取得することはできませんニットとき

--- 
params: 
    B: 'test' 
--- 

```{r simple, results='asis', echo=FALSE} 
write(params[['B']], file = "") 
``` 

```{r recursive-evaluation-questionmark, results='asis', echo=FALSE} 
write(
    "How to get \"params[['B']]\" evaluated here? This \"`r params[['B']]`\" is 
    expected to be \"test\" ...", 
    file = "") 
``` 

は現在、これは次のように生成純粋なRコードを使用して問題を解決することができます。 write()の代わりにcat()を使用することをおすすめします。あなた例えば、

より複雑なマクロのような置換を
write(
    paste0("How to get \"params[['B']]\" evaluated here? This \"", params[['B']], "\" is 
    expected to be \"test\" ..."), 
file = "") 

または

cat("How to get \"params[['B']]\" evaluated here? This \"", params[['B']], "\" is 
    expected to be \"test\" ...", sep = "") 

シンプルな、あなたは、例えば、sub()またはgsub()機能を使用する場合があります

msg <- "How to get \"params[['B']]\" evaluated here? This \"%param%\" is 
    expected to be \"test\" ..." 
cat(sub("%param%", params[['B']], msg)) 
+0

アドバイスありがとうございます。私は実際に 'brew'を使って同様の解決策を用意していましたが、それはすごく面倒です。 'params [['A']]'の条件​​付きであると仮定された場合... – balin

+0

これはすべてRコードで行われているので、条件文を使うことができます。 'if'をインラインで使用できることを覚えておいてください。 (params [["A"]])params [['B']] else "something else"、msg)) 'cat(sub("%param% – user2554330