R Markdown调用pmap渲染子文档时末尾输出未知NULL值问题
问题根源
你在子Markdown里逐段排查找不到NULL来源很正常,因为这个异常输出根本不是子文档代码生成的,问题出在主文档的函数调用逻辑上:
- 你定义的
Child_function最后一行调用的cat()函数,自身的返回值就是NULL pmap()批量执行函数时,会默认收集每一次调用的返回值,组装成列表返回- 主文档里给调用
pmap的代码块设置了results='asis'参数,knitr会把pmap()返回的列表内容也当成待渲染的文档内容输出,就把列表里存储的NULL打印了出来,位置刚好落在最后一个渲染完成的选项卡(也就是第二题的Plot选项卡)底部。
解决方法
两种方案任选其一即可,都是单处小改动:
方案1:屏蔽pmap的返回值输出
直接修改主文档中调用pmap的代码块,用invisible()包裹调用逻辑,让pmap生成的返回列表不会被自动打印:
invisible(pmap(questions_list, Child_function))
方案2:让自定义函数无有效返回值
修改Child_function的定义,在cat(res, sep = "\n")行下方新增一行代码,让函数执行完后返回不可见的空值,不会被pmap收集到可打印的内容:
Child_function <- function(variable, title, variable_title){ child_env <- new.env() child_env$variable <- variable child_env$title <- title child_env$variable_title <- variable_title res <- knitr::knit_child( "C:/PROJECT-CLONES/REPEX/Questions-Child.Rmd", envir = child_env, quiet = TRUE ) cat(res, sep = "\n") # 新增下面这行 invisible(return()) }
两种改法都能彻底消除多余的[[i]] NULL输出,不需要修改子文档里的任何表格、绘图代码。
内容的提问来源于stack exchange,提问作者Araph7
相关产品推荐
相关产品推荐

