I would like to have more control on the R session in org-mode so that I only have to chage the session name in one place for the modification to affect the whole buffer.
The only way I could think this through was to modify the org-babel-default-header-args
.
I want to define a function so that I can modify the default arguments easily. But I don't know how to pass the name of the session as a string. see the code below.
(defun set-session-name (&optional r-session-name r-session-directory)
(interactive (list
(read-from-minibuffer "r-session-name: " "*R*" )
(read-from-minibuffer "r-session-directory: " "/home/test/")))
(setq org-babel-default-header-args:R
(cons '(:dir . "%s" r-session-directory))
(cons '(:session . r-session-name)
(assq-delete-all :session org-babel-default-header-args:R))
))
(:dir . "%s" ression directory "/home/test/")
is obviously wrong. Can you help please?
** Some details **
Let's say that we are in an .org
buffer and I have a buffer wide header like the following. With the session name being remote-R-remote*
and the ouput being silenced :output silent
#+PROPERTY: header-args:R :session *remote-R-remote* :exports results :colnames yes :results output silent :output-dir images/ :dir "/ssh:gnu:/home/livelygnu/Documents/R/" :eval yes :cache yes
* Some First steps
#+Name:
#+BEGIN_SRC R
do some stuffs
#+END_SRC
Now if in a subtree we want to produce a certain number of graphs but don't want to write :results output graphics
all the time along with the file extension we have to redefine the whole header argument for this subtree.
** output some graphs
:PROPERTIES:
:header-args:R: :session *remote-R-remote* :results output graphics :output-dir: images/ :eval yes :file-ext pdf
:END:
#+Name: name_of_graphs
#+BEGIN_SRC R
plot(a)
#+END_SRC
many more graphs possibly
We can do the same for latex output for example
** output some results
:PROPERTIES:
:header-args:R: :session *remote-R-remote* :results output latex :output-dir:
:END:
#+Name: name_of_graphs
#+BEGIN_SRC R
output latex block
#+END_SRC
Now let's say while our estimation is working on the session remote-R-remote (possibly a long computation), we want to continue to work on some graphs in another session. for that we would have to change the :session names for all the code block that we need. But If instead we modify the default arguments in org-babel-default-header-args
. Then changing the key :session there would change the session everywhere. Of course this mean that we would not have to write :session *remote-R-remote*
all the time as well since we can put it as default.
:output
all the other buffer-wide parameters falls back to default including:session
. That's why I tried to modify the defaults paremeters. The function works well but I"m switching the session name by hand directly in the function