Saya mengalami sedikit masalah dengan blok kode yang menghasilkan tabel org untuk kemudian dikonsumsi oleh blok kode lainnya. Sebagai contoh:
#+NAME: upper_air
#+BEGIN_SRC clojure :results output raw
(clojure.pprint/print-table table)
#+END_SRC
akan menghasilkan
#+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 |
tapi yang benar-benar saya sukai adalah
#+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 |
(note #+RESULTS
vs. #+TBLNAME
) sehingga selanjutnya saya bisa melakukan sesuatu seperti
#+BEGIN_SRC ipython :session :var data=upper_air
import numpy as np
arr = np.array(data)
p = arr[:,4]
#+END_SRC
Dengan #+RESULTS
hasilnya, blok kode kedua akan menafsirkan data
argumen sebagai string, bukan tabel data dan saya tidak akan dapat mengekstraksi data dengan cara langsung. Saya bisa mengonversi data ASCII ke struktur data Python 'secara manual', tetapi saya lebih suka org menanganinya untuk saya :-) Apakah ada cara untuk salah satu blok kode pertama untuk menghasilkan #+TBLNAME
bukan #+RESULTS
? Atau, bisakah kode kedua memblokir argumen sebagai tabel org bukan string?
clojure.pprint/print-table
mengembalikan string yang diformat sebagai tabel Org, dan karena Anda menetapkan argumen header menjadi output
dan raw
, Anda mendapatkan apa yang Anda dapatkan. Namun, ketika Anda menggunakannya untuk kedua kalinya, Org tidak membaca tabel yang dihasilkan, sebagai gantinya, ia mengevaluasi ulang blok Clojure dan mengumpankan hasilnya ke blok Python. Namun, jika blok Clojure menghasilkan array 2D, Anda bisa mengubah hasilnya menjadi value
bukan raw
Org untuk memformat hasil itu sebagai tabel, dan Anda akan mendapatkannya sebagai array 2D di blok Python.