Tengo algunos problemas con los bloques de código que producen tablas de organización para luego ser consumidas por otros bloques de código. Por ejemplo:
#+NAME: upper_air
#+BEGIN_SRC clojure :results output raw
(clojure.pprint/print-table table)
#+END_SRC
Producirá
#+RESULTS: upper_air
| :m | :degree | :meter/second | :degC | :millibar |
|---------+---------+---------------+------------+-----------|
| 1545.0 | 175.0 | 12.36 | 15.400001 | 850.0 |
| 3162.0 | 265.0 | 6.69 | 4.8 | 700.0 |
pero lo que realmente me gustaría es
#+TBLNAME: upper_air
| :m | :degree | :meter/second | :degC | :millibar |
|---------+---------+---------------+------------+-----------|
| 1545.0 | 175.0 | 12.36 | 15.400001 | 850.0 |
| 3162.0 | 265.0 | 6.69 | 4.8 | 700.0 |
(nota #+RESULTS
vs. #+TBLNAME
) para que posteriormente pueda hacer algo como
#+BEGIN_SRC ipython :session :var data=upper_air
import numpy as np
arr = np.array(data)
p = arr[:,4]
#+END_SRC
Con el #+RESULTS
resultado, el segundo bloque de código interpretará el data
argumento como una cadena en lugar de una tabla de datos y no podré extraer los datos de una manera directa. Podría convertir los datos ASCII a una estructura de datos de Python 'manualmente', pero preferiría que la organización lo maneje por mí :-) ¿Hay alguna forma de que el primer bloque de código genere un en #+TBLNAME
lugar de #+RESULTS
? Alternativamente, ¿puede el segundo bloque de código coaccionar el argumento como una tabla de organización en lugar de una cadena?
clojure.pprint/print-table
devuelve una cadena con formato de tabla Org, y dado que configura el argumento de encabezado comooutput
yraw
, obtiene lo que obtiene. Sin embargo, cuando lo usa por segunda vez, Org no lee la tabla resultante, sino que vuelve a evaluar el bloque Clojure y alimenta su resultado al bloque Python. Sin embargo, si el bloque Clojure produjo una matriz 2D, puede cambiar el resultado para que seavalue
y noraw
para que Org formatee ese resultado como una tabla, y lo obtendría como una matriz 2D en el bloque Python.Respuestas:
Necesita que su bloque de tabla devuelva una matriz (o vector o lista, etc.) como esta. Puede obtener líneas horizontales con None, o nil o cualquier tipo equivalente en clojure.
fuente