У меня небольшие проблемы с блоками кода, которые создают таблицы 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.