2016-01-04 7 views
5

मैं एक .rmd फ़ाइल विकसित करने के बारे में सोच रहा हूं जो पिछले आर परिणाम के आधार पर आउटपुट फ़ाइल (.html, .pdf, ...) में वर्णों के कुछ हिस्सों को गतिशील रूप से लिख सकता है। यह नीचे सरल रखने के लिए मैं कैसे यह काम करता है चाहते हैं: साधारण पाठ और कोड के हिस्सा:प्रत्येक खंड में आर कोड परिणामों के आधार पर गतिशील रूप से कथा पाठ को आउटपुट कर सकते हैं?

```{r,echo=F,include=FALSE} 
x=1; 

``` 
##if x=1 then output text below 
text1 

##if x=2 then output text below 
text2 

..... 
+4

\ 'आर बिल्ली (सी ('टेक्स्ट 1,' टेक्स्ट 2 ') [x]) \'? – arvi1000

+1

आपके प्रश्न का उत्तर 'हां' है, यह कई तरीकों से किया जा सकता है। –

+0

@ ब्रायन हैनसन धन्यवाद ब्रायन, क्या आप एक या दो उदाहरण देकर कुछ प्रकाश डालते हैं? अत्यधिक सराहनीय। – xappppp

उत्तर

0

ऊपर जवाब सब अच्छा है और अच्छी तरह है, लेकिन जटिल है। टिप्पणी में सुझाए गए जैसे इनलाइन कोड का प्रयोग करें।

The mean of x is `r mean(x)` which is very high... 

संपादित करें: इस के बाद से जवाब के रूप में चुना गया था। मैं विस्तृत करूंगा। यदि आप() या ifelse() या स्विच() का उपयोग कर सकते हैं। मुझे सबसे तेज़, तेज और क्लीनर कोड स्विच करना पसंद है। हालांकि मुझे यकीन है कि स्विच में किसी अन्य कथन का उपयोग कैसे करें।

```{r} 
x <- 1 
``` 
x is `r if(x==1){"equal to one"} else {"not equal to one"}` which is great... 

x is `r ifelse(x==1, "equal to one", ifelse(x==2, "equal to two", "not equal to one or two"))` which is great... 

x is `r switch(x, "1" = "equal to one", "2" = "equal to two")` which is great... 
+0

सवाल * सशर्त * आउटपुट के बारे में था। तो आपको इनलाइन अभिव्यक्ति में कम से कम 'if (condition)' जोड़ने की आवश्यकता है। यह भी ध्यान रखें कि मेरा उत्तर काफी वर्बोज़ हो सकता है, लेकिन नीचे की रेखा पिछले उदाहरण में दिखाए गए अनुसार सरल है ('asis, echo = ...}' के साथ खंड)। –

4

knitr एक दस्तावेज प्रक्रियाओं है, तो दस्तावेज़ इनपुट की दो श्रेणियों में विभाजित है। साधारण पाठ अपरिवर्तित रहता है और आउटपुट फ़ाइल में भेज दिया जाता है। नतीजतन, यदि सादे पाठ को गतिशील रूप से शामिल किया जाना चाहिए, तो यह के अंदर एक हिस्सा होना चाहिए।

कोड भाग का मूल्यांकन उनके options के अनुसार किया जाता है। वर्तमान परिदृश्य में, सबसे करने के लिए महत्वपूर्ण विकल्प हैं:

  • eval
  • echo
  • results
  • engine

eval निर्धारित करता है एक हिस्सा मूल्यांकन किया जाता है है; eval = FALSE खंड को छोड़ देता है। echo निर्धारित करता है कि खंड का स्रोत कोड प्रदर्शित होता है या नहीं। results निर्धारित करता है कि एक खंड के आउटपुट का इलाज कैसे किया जाता है। डिफ़ॉल्ट रूप से (results = "markup) आउटपुट हुक आउटपुट में दस्तावेज़-प्रकार-विशिष्ट मार्कअप को लागू करने के लिए उपयोग किया जाता है। results = "asis" का अर्थ है कि सभी आउटपुट आउटपुट फ़ाइल "as-is" में बिना किसी संशोधन के शामिल हैं।

इन तीन विकल्पों के साथ, निम्नलिखित पूरा किया जा सकता:

This is some text ... 

```{r, echo = FALSE, eval = FALSE, results = "asis"} 
cat("... with a secret inside ...") 
``` 

```{r, echo = FALSE, eval = TRUE, results = "asis"} 
cat("... that is dynamically generated.") 
``` 

आउटपुट:

This is some text ... 



... that is dynamically generated. 

ध्यान दें कि पहली हिस्सा क्योंकि eval = FALSE मूल्यांकन नहीं किया गया है।

हालांकि, यह cat() आर आर खंड से बहुत सारे पाठ के लिए बोझिल है। इस पर काबू पाने के लिए engine का उपयोग किया जा सकता है। आर के अलावा, other engines हैं जिनका उपयोग उन हिस्सों का मूल्यांकन करने के लिए किया जा सकता है, जिनमें से (वर्तमान में अनूदित?) इंजन asis है। यह इंजन बहुत आसान है। knitr NEWS file से:

नेनामक एक नया इंजन जोड़ा जो इसे संसाधित किए बिना खंड सामग्री लिखने के लिए जोड़ा गया; यह चंक विकल्प echo और eval का भी सम्मान करता है - जब कोई भी FALSE होता है, तो खंड छिपाया जाएगा; इस के लिए यह संभव सशर्त

निम्नलिखित वाक्यात्मक चीनी के साथ asis इंजन का मेल पाठ लिखने के लिए (source)

भाषा इंजन के लिए, आर Markdown कोड हिस्सा हेडर की वाक्य रचना अब ```{lang, option=value}` हो सकता है बनाता है (उदाहरण के लिए```{python} और ```{Rcpp}) है, जो ऊपर से ```{r, engine='lang', option=value}

उदाहरण के बराबर है हो जाता है:

This is some text ... 

```{asis, echo = FALSE} 
... with a secret inside ... 
``` 

```{asis, echo = TRUE} 
... that is dynamically generated. 
``` 
+0

धन्यवाद @ सीएल। तुम्हारे जवाब के लिए। हालांकि, आपका समाधान उसी कोड प्रारूप में उस कोड खंड में किसी और चीज को प्रिंट करेगा और डिफ़ॉल्ट कोड आउटपुट की तरह नहीं। मैं अपना समाधान जोड़ूंगा। – ah25

+0

@ ऐसी हां, यह जानबूझकर है। इस प्रश्न का आपके मुकाबले थोड़ा अलग फोकस है। यदि आप रुचि रखते थे तो मैंने इसे केवल तभी जोड़ा था। –

+0

सशर्त रूप से प्रदर्शित होने वाले पाठ के छोटे टुकड़ों के लिए, [यह उत्तर] (http://stackoverflow.com/a/25407811/2706569) एक बहुत ही उपयोगी समाधान प्रदान करता है। –

0

निम्नलिखित शीर्षलेख मुद्रित करेगा और उस हेडर के बाद कोड हेड को निष्पादित करेगा जो शर्त (x) सेट करता है।

```{r,} 
x<- FALSE 
Title <- ifelse(x, "My header","") 
``` 

## `r Title` 
```{r, echo=FALSE} 
if(x) {print(1:5)} 
``` 
+0

आप इसे अपने प्रश्न में बेहतर (अपने मौजूदा उत्तर में) जोड़ देंगे; मुझे नहीं लगता कि यह यहां है। –

संबंधित मुद्दे

 संबंधित मुद्दे