2015-10-13 9 views
11

कुछ सरल परीक्षणों के आधार पर, interactive()rmarkdown::render() या knitr::knit2html() के भीतर कोड चलाते समय सत्य है। यही कारण है, एक सरल .rmd युक्तकैसे बताएं कि कोड को knitr/rmarkdown संदर्भ में निष्पादित किया गया है या नहीं?

```{r} 
print(interactive()) 
``` 

कि TRUE रिपोर्ट एक HTML फ़ाइल देता है फ़ाइल है।

क्या किसी को एक परीक्षण के बारे में पता है जो मैं एक कोड खंड के भीतर चला सकता हूं जो यह निर्धारित करेगा कि यह "गैर-अंतःक्रियात्मक" चलाया जा रहा है, जिसके द्वारा मेरा मतलब है "knit2html() या प्रस्तुत करना()"?

उत्तर

13

Yihui suggested on githubisTRUE(getOption('knitr.in.progress')) के रूप में पता लगाने के लिए कोड बुना हुआ जा रहा है कि क्या है या सहभागी निष्पादित किया जा सकता है।

2

मुझे संदेह है (?) आपको बस अपना खुद का रोल करने की आवश्यकता हो सकती है।

यदि ऐसा है, तो यहां एक दृष्टिकोण है जो ठीक प्रदर्शन करने लगता है। यह कॉल स्टैक में सभी कार्यों के नाम निकालने के द्वारा काम करता है, और फिर जांचता है कि उनमें से किसी को "knit2html" या "render" नाम दिया गया है या नहीं। (कैसे मजबूत आप इस होने की जरूरत के आधार पर आप यह सुनिश्चित करें कि इन knitr और rmarkdown संकुल में वास्तव में कार्य हैं बनाने के लिए कुछ अतिरिक्त जाँच कर सकता है, लेकिन सामान्य विचार अब भी वही होगा।)

```{r, echo=FALSE} 
isNonInteractive <- function() { 
    ff <- sapply(sys.calls(), function(f) as.character(f[[1]])) 
    any(ff %in% c("knit2html", "render")) 
} 
``` 

```{r} 
print(isNonInteractive()) 
``` 
3

अपने आप को रोल करने के लिए एक आसान सुझाव: देखें कि क्या आप वर्तमान खंड विकल्पों तक पहुंच सकते हैं।

```{r, echo = FALSE} 
inside_knitr = function() { 
    length(knitr::opts_current$get()) > 0 
} 
``` 

```{r} 
inside_knitr() 
``` 

बेशक, कई चीजें जिन्हें आप जांच सकते हैं। मुझे वर्तमान खंड विकल्पों के विचार पसंद हैं, एक और संभावना नीचे है। मैं वास्तव में या तो पेशेवरों/विपक्ष के बारे में निश्चित नहीं हूं।

```{r} 
!is.null(knitr::opts_knit$get("out.format")) 
``` 
संबंधित मुद्दे