2017-11-15 10 views
0

문서에서 R 청크로 생성 된 문자열을 다시 평가하고 싶습니다. 가능합니까? 데모 목적으로 다음과 같은 문서를 고려해rmarkdown : 재귀 적 청크 평가?

--- 
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 = "") 
``` 

는 현재이 생산을 다음과 니트 때

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

당신은 R을 치료하기 위해 knitr를 얻을 수 없다 코드를 텍스트로 만들지 만 순수한 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 [[ 'B']] else "something else", msg))'cat (sub ("% param % – user2554330