在R Markdown中赋值时如何抑制函数的绘图输出?
解决R Markdown中函数赋值时自动输出绘图的问题
这个问题的核心在于:你在tryFun()里直接调用plot()时,它会立刻在当前的绘图设备(也就是你的R Markdown文档的输出设备)上渲染图形,invisible()和results='hide'都没法阻止这个行为——因为前者只是隐藏函数返回值的打印,后者控制的是文本输出,都管不了绘图设备的即时渲染。
要实现只在调用变量时显示绘图,你需要让函数里的绘图在一个临时的、不显示的绘图设备里完成,只记录绘图对象,不输出到当前文档。下面是具体的修改方案:
修改tryFun.R的代码
把函数里的绘图操作放到临时设备中执行,避免直接输出到文档设备:
tryFun <- function(x){ res = 3*x # 打开一个临时的空绘图设备(不会显示任何内容) pdf(NULL) # 在临时设备上绘图 plot(1:1000) # 记录绘图对象 p <- recordPlot() # 关闭临时设备 dev.off() return(list(res=res,p=p)) }
修改tryRmd.R中的代码
现在赋值的时候就不会自动输出绘图了,你可以在需要的地方调用x1$p来显示:
#' --- #' title: "Try for the first time" #' output: word_document #' params: #' xvar: "" #' --- #' ## Introduction #' Hi, this is me trying something for the first time #' #Hello again ```{r, echo=FALSE} direct = "G:/Documents/WarehouseMovements" filename <- paste(direct, "pickingsregels_wmp700_monthly_201711.txt", sep="/") source("tryFun.r") xvar <- params$xvar x1 <- tryFun(xvar) ### 现在这里不会再显示绘图了
cat("hi") cat(x1$res) plot.new() x1$p ### 这里正常显示绘图
## 原理说明 - `pdf(NULL)`会创建一个不生成实际文件的PDF设备,所有绘图操作都在这个临时设备里完成,不会输出到你的R Markdown文档中。 - `dev.off()`关闭临时设备,回到原来的文档绘图设备。 - 用`recordPlot()`记录的绘图对象`p`,在你后续调用时才会在当前设备(文档设备)上渲染出来。 这样就能完美实现你想要的“自主控制绘图输出位置”的需求啦! 内容的提问来源于stack exchange,提问作者pk_22
相关产品推荐
相关产品推荐

