org mode中 R作图, 总是输出到RPlots.pdf, :file指定的文件名不起作用

#+begin_src R :exports results :results value file :file myplot.png :dir ~/Downloads/
matplot(matrix(rnorm(100), 10), type="l")
#+end_src

#+RESULTS:
[[file:../Downloads/myplot.png]]

我以为它会写到~/Downloads/myplot.png, 但是并不是这样, 总是输出到~/Downloads/Rplots.pdf, 同时会得到myplot.png一个空文件. Rplots.pdf是R中pdf函数的默认参数. 怎样才能输出到指定文件中?

Rplots.pdf是因为加了这个,和后面的:file参数重复了

value 改成 graphics 就好了

#+begin_src R :results graphics file :file myplot.png :dir ~/Downloads/

具体可以看R Source Code Blocks in Org Mode

其实只差一个graphics, 加上graphics就可以了. 我猜测一下原因: 首先楼上提供的链接这里说, 9.3之后的需要联用graphics和file. 至于graphics的作用. graphics其实在org mode文档中和link是等价的. 但我猜, R babel是这样实现的: 如果看到graphics, 就会在代码前面添加pdf或者png, 表示定向. 至于调用哪个函数, 由:file决定. 即使没有:results file, 只有:

#+begin_src R :dir ~/Downloads/
matplot(matrix(rnorm(100), 10), type="l")
#+end_src

也会输出图片. 调用的是pdf函数, 并且不会用:file参数.

这里没有graphics, R babel会对它做什么: 说了pdf会调用, 没有参数, 会保存到Rplots.pdf. 但是:file呢. 会生成一个空文件. 因为画图的图像数据传到Rplots.pdf了. 如果修改成:

#+begin_src R :exports results :results output file :file myplot.png :dir ~/Downloads/
print(c(1,2,3))
matplot(matrix(rnorm(100), 10), type="l")
#+end_src

那么myplot.png就会得到[1] 1 2 3.

总结一下要点:

  • 要想正确使用, file, graphics一定要连用
  • 没有graphics, 就算没有file, 画图会保存到Rplots.pdf, 因为调用了没有参数的pdf函数.
1 个赞