#+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 个赞