在自定义语言引擎中抑制对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)
```