Pregunta:
Me gustaría tener más control sobre la sesión de R en modo org, de modo que solo tenga que cambiar el nombre de la sesión en un lugar para que la modificación afecte a todo el búfer. La única forma en que pude pensar en esto fue modificar org-babel-default-header-args
.
Quiero definir una función para poder modificar los argumentos predeterminados fácilmente. Pero no sé cómo pasar el nombre de la sesión como una cadena. vea el código a continuación.
(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/")
es obviamente incorrecto. ¿Me puedes ayudar, por favor?
** Algunos detalles ** Digamos que estamos en un búfer .org
y tengo un encabezado ancho de búfer como el siguiente. Con el nombre de la sesión siendo remote-R-remote*
y la :output silent
silenciada :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
Ahora, si en un subárbol queremos producir una cierta cantidad de gráficos pero no queremos escribir :results output graphics
todo el tiempo junto con la extensión del archivo, tenemos que redefinir todo el argumento del encabezado para este subárbol.
** 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
Podemos hacer lo mismo con la salida de látex, por ejemplo.
** 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
Ahora digamos que mientras nuestra estimación está funcionando en la sesión remoto-R-remoto (posiblemente un cálculo largo), queremos continuar trabajando en algunos gráficos en otra sesión. para eso tendríamos que cambiar los: nombres de sesión para todo el bloque de código que necesitemos. Pero si en cambio modificamos los argumentos predeterminados en org-babel-default-header-args
. Luego, cambiando la clave: la sesión allí cambiaría la sesión en todas partes. Por supuesto, esto significa que no tendríamos que escribir :session *remote-R-remote*
todo el tiempo también, ya que podemos ponerlo por defecto.
Respuesta:
Aplicaría la sintaxis de propiedad de todo el búfer (org-mode 9), por ejemplo, para un búfer R (sesión) llamado *R*
:
#+PROPERTY: header-args:R :session *R*
org-mode <9:
#+PROPERTY: session *R*
Y haga Cc Cc
en esta línea para activar nuevas configuraciones.