Ich habe ein paar Probleme mit Codeblöcken, die Organisationstabellen erzeugen, die später von anderen Codeblöcken verwendet werden. Beispielsweise:
#+NAME: upper_air
#+BEGIN_SRC clojure :results output raw
(clojure.pprint/print-table table)
#+END_SRC
wird herstellen
#+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 |
aber was ich wirklich gerne hätte ist
#+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 |
(Anmerkung #+RESULTS
vs. #+TBLNAME
) damit ich später so etwas machen kann
#+BEGIN_SRC ipython :session :var data=upper_air
import numpy as np
arr = np.array(data)
p = arr[:,4]
#+END_SRC
Mit dem #+RESULTS
Ergebnis interpretiert der zweite Codeblock das data
Argument als Zeichenfolge anstelle einer Datentabelle, und ich kann die Daten nicht auf einfache Weise extrahieren. Ich könnte die ASCII-Daten 'manuell' in eine Python-Datenstruktur konvertieren, aber ich würde es vorziehen, wenn org sie für mich handhabt :-) Gibt es eine Möglichkeit, dass einer der ersten Codeblöcke a #+TBLNAME
anstelle von ausgibt #+RESULTS
? Kann der zweite Codeblock das Argument alternativ als org-Tabelle anstelle einer Zeichenfolge erzwingen?
clojure.pprint/print-table
gibt eine Zeichenfolge zurück, die als Org-Tabelle formatiert ist, und da Sie das Header-Argument aufoutput
und setzenraw
, erhalten Sie, was Sie erhalten. Wenn Sie es jedoch zum zweiten Mal verwenden, liest Org die resultierende Tabelle nicht, sondern wertet den Clojure-Block neu aus und gibt das Ergebnis an den Python-Block weiter. Wenn jedoch der Clojure Block eine 2D - Array erzeugt, könnten Sie das Ergebnis ändern zu seinvalue
und nichtraw
für Org zu Format , das Ergebnis als Tabelle, und Sie würden es als ein 2D - Array in Python Block erhalten.Antworten:
Ihr Tabellenblock muss ein Array (oder einen Vektor oder eine Liste usw.) wie dieses zurückgeben. Sie können horizontale Linien mit None oder nil oder einem anderen äquivalenten Typ in clojure erhalten.
quelle