Tôi gặp một chút rắc rối với các khối mã tạo ra các bảng org để sau đó được sử dụng bởi các khối mã khác. Ví dụ:
#+NAME: upper_air
#+BEGIN_SRC clojure :results output raw
(clojure.pprint/print-table table)
#+END_SRC
sẽ sản xuất
#+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 |
nhưng điều tôi thực sự muốn là
#+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 |
(lưu ý #+RESULTS
so với #+TBLNAME
) để sau đó tôi có thể làm một cái gì đó như
#+BEGIN_SRC ipython :session :var data=upper_air
import numpy as np
arr = np.array(data)
p = arr[:,4]
#+END_SRC
Với #+RESULTS
kết quả, khối mã thứ hai sẽ diễn giải data
đối số dưới dạng chuỗi thay vì bảng dữ liệu và tôi sẽ không thể trích xuất dữ liệu theo cách đơn giản. Tôi có thể chuyển đổi dữ liệu ASCII thành cấu trúc dữ liệu Python 'thủ công', nhưng tôi muốn org xử lý nó cho tôi :-) Có cách nào để khối mã đầu tiên xuất ra #+TBLNAME
thay thế #+RESULTS
không? Ngoài ra, khối mã thứ hai có thể ép buộc đối số dưới dạng bảng org thay vì chuỗi không?
clojure.pprint/print-table
trả về một chuỗi được định dạng dưới dạng bảng Org và vì bạn đặt đối số tiêu đề thành output
và raw
, bạn sẽ nhận được những gì bạn nhận được. Tuy nhiên, khi bạn sử dụng nó lần thứ hai, Org không đọc bảng kết quả, thay vào đó, nó đánh giá lại khối Clojure và đưa kết quả của nó vào khối Python. Tuy nhiên, nếu khối Clojure tạo ra một mảng 2D, bạn có thể thay đổi kết quả thành value
và không raw
cho Org định dạng kết quả đó dưới dạng bảng và bạn sẽ lấy nó thành mảng 2D trong khối Python.