Estou com alguns problemas com blocos de código que produzem tabelas organizacionais para serem posteriormente consumidos por outros blocos de código. Por exemplo:
#+NAME: upper_air
#+BEGIN_SRC clojure :results output raw
(clojure.pprint/print-table table)
#+END_SRC
vai produzir
#+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 |
mas o que eu realmente gostaria é
#+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, eu possa fazer algo como
#+BEGIN_SRC ipython :session :var data=upper_air
import numpy as np
arr = np.array(data)
p = arr[:,4]
#+END_SRC
Com o #+RESULTS
resultado, o segundo bloco de código interpretará o data
argumento como uma sequência em vez de uma tabela de dados e não poderei extrair os dados de maneira direta. Eu poderia converter os dados ASCII em uma estrutura de dados Python 'manualmente', mas eu preferiria a organização lidar comigo :-) Existe uma maneira de o primeiro bloco de código gerar um em #+TBLNAME
vez de #+RESULTS
? Como alternativa, o segundo bloco de código pode coagir o argumento como uma tabela organizacional em vez de uma sequência?
clojure.pprint/print-table
retorna uma string formatada como tabela Org e, desde que você defina o argumento do cabeçalho como output
e raw
, você obtém o que obtém. No entanto, quando você a usa pela segunda vez, a Org não lê a tabela resultante. Em vez disso, reavalia o bloco Clojure e alimenta seu resultado no bloco Python. No entanto, se o bloco Clojure produzisse uma matriz 2D, você poderia alterar o resultado para ser value
e não raw
para a Org formatar esse resultado como uma tabela e obtê-lo como uma matriz 2D no bloco Python.