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
在自定义语言引擎中抑制对knitr块选项的求值_R_R Markdown_Knitr - Fatal编程技术网

在自定义语言引擎中抑制对knitr块选项的求值

在自定义语言引擎中抑制对knitr块选项的求值,r,r-markdown,knitr,R,R Markdown,Knitr,我正在编写一个定制的knitr语言引擎来支持,我希望用户能够像这样编写R标记代码块: ```{tar_target analysis, pattern = map(data)} run_analysis(data) ``` 我希望避免计算模式参数,因为映射(数据)是DSL in,而不是实际的R代码。但是当我运行块时,在控制传递给引擎之前,我得到了一个“找不到函数‘map’”错误。作为开发人员,我是否可以在knitr尝试评估必要的选项之前调用substitute() 编辑:考虑支持包装器来控制

我正在编写一个定制的
knitr
语言引擎来支持,我希望用户能够像这样编写R标记代码块:


```{tar_target analysis, pattern = map(data)}
run_analysis(data)
```
我希望避免计算
模式
参数,因为
映射(数据)
是DSL in,而不是实际的R代码。但是当我运行块时,在控制传递给引擎之前,我得到了一个“找不到函数‘map’”错误。作为开发人员,我是否可以在
knitr
尝试评估必要的选项之前调用
substitute()

编辑:考虑支持包装器来控制
tar\u target()
的特殊参数:


您可以在RMarkdown代码块周围使用带有三个以上反勾号的匹配代码围栏。我只是粗略地看了一下这个问题,是否可以导出
map
(可能还有其他函数),当调用该函数时,返回未计算的表达式,类似于
~
的功能?这样您就不会阻止knitr评估参数,但结果是一样的:您仍然可以访问未评估的版本。当然,接下来的挑战是只向knitr公开这些函数,而不是向用户代码公开。谢谢您的输入。您如何看待OP编辑中的
tar_args()
包装器?这对用户来说会不会太尴尬或太麻烦?老实说,如果可以避免使用包装器,那显然会更好。不知道用knitr是否能做到。嗯。。。如果
pattern
是一个语言对象,则
knitr
会自动将其转换为
“NA”
,即使在
tar_args
列表中也是如此。因此,如果我们使用块选项,用户可能只需要逐个引用参数。我能想到的另一种选择是完全避免使用块选项,并使用某种单一的自定义内联YAML来指定
tar\u target()
的参数。

```{tar_target analysis, tar_args = tar_args(pattern = map(data), error = "workspace")}
run_analysis(data)
```