У меня небольшие проблемы с блоками кода, которые создают таблицы org для последующего использования другими блоками кода. Например:
#+NAME: upper_air
#+BEGIN_SRC clojure :results output raw
(clojure.pprint/print-table table)
#+END_SRC
будет производить
#+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 |
но то, что я действительно хотел бы,
#+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 |
(примечание #+RESULTS
против #+TBLNAME
), чтобы впоследствии я мог сделать что-то вроде
#+BEGIN_SRC ipython :session :var data=upper_air
import numpy as np
arr = np.array(data)
p = arr[:,4]
#+END_SRC
В #+RESULTS
результате второй блок кода будет интерпретировать data
аргумент как строку вместо таблицы данных, и я не смогу извлечь данные простым способом. Я мог бы преобразовать данные ASCII в структуру данных Python «вручную», но я бы предпочел, чтобы org обрабатывал их для меня :-) Есть ли способ для вывода первого блока кода #+TBLNAME
вместо #+RESULTS
? В качестве альтернативы, может ли второй блок кода привести аргумент в виде таблицы org вместо строки?
clojure.pprint/print-table
возвращает строку, отформатированную как таблица Org, и, поскольку вы устанавливаете аргумент заголовка равным output
и raw
, вы получаете то, что получаете. Однако, когда вы используете его во второй раз, Org не читает результирующую таблицу, а переоценивает блок Clojure и передает свой результат в блок Python. Тем не менее, если блок Clojure создает 2D-массив, вы можете изменить результат на Org, value
а не raw
на форматирование этого результата в виде таблицы, и вы получите его как 2D-массив в блоке Python.