Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/r/71.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/node.js/36.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
R 克尼特:不要吐一大块_R_Knitr_R Markdown - Fatal编程技术网

R 克尼特:不要吐一大块

R 克尼特:不要吐一大块,r,knitr,r-markdown,R,Knitr,R Markdown,考虑以下测试.Rmd: ```{r setup, purl=FALSE} opts_chunk$set(purl=FALSE) opts_template$set(nopurl = list(purl=FALSE)) ``` ```{r test1} print(1) ``` ```{r test2, opts.label='nopurl'} print(2) ``` ```{r test3, purl=FALSE} print(3) ``` purl('test.Rmd')给

考虑以下
测试.Rmd

```{r setup, purl=FALSE}
opts_chunk$set(purl=FALSE)
opts_template$set(nopurl = list(purl=FALSE))
```     

```{r test1}
print(1)
```

```{r test2, opts.label='nopurl'}
print(2)
```

```{r test3, purl=FALSE}
print(3)
```
purl('test.Rmd')
给出了
test.R
,其中没有一个test*块应该被purl,但是:

## ----test1---------------------------------------------------------------
print(1)


## ----test2, opts.label='nopurl'------------------------------------------
print(2)
只有
test3
没有发出声音,其余的都发出声音,尽管全局选项
opts\u chunk$set(purl=FALSE)
和标签
nopurl


为什么?

这不是一个bug,只是
purl()
没有执行任何代码块,所以第一个代码块没有真正执行。
purl()
函数在许多方面都不可靠,请参见
?knitr::hook_purl
。也就是说,我根本不建议清理文档;编织更可靠(参见
?knitr::purl
中的注释部分)。

根据易慧的反馈,方法如下:

```{r setup, purl=FALSE}
knit_hooks$set(purl = hook_purl)
opts_template$set(nopurl = list(purl=FALSE))
opts_template$set(dopurl = list(purl=TRUE))
```

```{r test}
print(1)
```

```{r test2, opts.label='nopurl'}
print(2)
```

```{r test3, opts.label='dopurl'}
print(3)
```
使用这种方法,您不需要:

purl('test.Rmd') 
你只需:

knit('test.Rmd') 
并获取通常的
test.md
test.R
文件。后者如下:

## ----test----------------------------------------------------------------
print(1)

## ----test3, opts.label='dopurl'------------------------------------------
print(3)
如您所见,给定
knit\u hooks$set(purl=hook\u purl)
,块的默认行为是purling

在实际使用中,
nopurl
dopurl
将收集更多选项,与(无)purling一起设置。
无论如何,在考虑以下注意事项时:

注意:不能保证由“purl()”生成的R脚本 可以重现在“knit()”中完成的计算。“knit() 过程可能相当复杂(块的特殊值 选项、自定义块挂钩、除R之外的计算引擎以及 “envir”论点等)。如果你想重现计算结果 在“knit()”生成的报告中,请确保使用“knit()”, 而不仅仅是执行由“purl()”生成的R脚本。 这似乎是显而易见的,但有些人就是不明白


当不需要purl时,最好总是使用
knit\u hooks$set(purl=hook\u purl)
并设置
purl=FALSE

对我来说似乎是一个错误。@Thomas:同意,希望Yihui能读到这里并解决这个疑问。好的,这是信息性的,在一个层面上是有意义的。不过,我很困惑为什么
purl
甚至是一个选项。我真的看不出它有多有用。@Thomas由于历史原因(识字编程、编织、纠结等等)。现在我发现它一点用都没有。问题是如果没有添加
opts.label
,那么添加
opts.label
就需要与添加
purl=FALSE
一样多的输入,而且透明度较低。我发现这是一种极其复杂的方法,可以完成相当基本的任务。要完成一件事,你需要:
knit\u hooks$set
选择模板$set
x2!然后选择标签。而且它根本不清楚hook_purl的来源。我刚刚测试了这个。为了有一个默认值,以便自动清除块,必须删除以下行:
opts\u template$set(dopurl=list(purl=TRUE))