Mam trochę problemów z blokami kodu, które tworzą tabele organizacji, które później mogą zostać wykorzystane przez inne bloki kodu. Na przykład:
#+NAME: upper_air
#+BEGIN_SRC clojure :results output raw
(clojure.pprint/print-table table)
#+END_SRC
będzie produkować
#+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 |
ale tak naprawdę chciałbym to
#+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 |
(uwaga #+RESULTS
vs. #+TBLNAME
), abym później mógł coś zrobić
#+BEGIN_SRC ipython :session :var data=upper_air
import numpy as np
arr = np.array(data)
p = arr[:,4]
#+END_SRC
W #+RESULTS
wyniku tego drugi blok kodu zinterpretuje data
argument jako ciąg zamiast tabeli danych i nie będę w stanie wyodrębnić danych w prosty sposób. Mógłbym przekonwertować dane ASCII na strukturę danych Pythona „ręcznie”, ale wolałbym, żeby org zajął się mną dla mnie :-) Czy istnieje sposób, aby pierwszy blok kodu wyprowadził #+TBLNAME
zamiast #+RESULTS
? Alternatywnie, czy drugi blok kodu może wymusić argument jako tabelę org zamiast łańcucha?
clojure.pprint/print-table
zwraca ciąg sformatowany jako tabela Org, a ponieważ ustawiłeś argument nagłówka na output
i raw
otrzymujesz to, co dostajesz. Jednak gdy użyjesz go drugi raz, Org nie czyta wynikowej tabeli, zamiast tego ponownie ocenia blok Clojure i podaje jego wynik do bloku Python. Jeśli jednak blok Clojure wytworzył tablicę 2D, możesz zmienić wynik na, value
a nie raw
dla Org, aby sformatować ten wynik jako tabelę, a otrzymasz go jako tablicę 2D w bloku Pythona.