我在生成组织表供以后由其他代码块使用的代码块时遇到麻烦。例如:
#+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
vs #+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为我处理:-)是否有一种方法可以让第一个代码块输出a #+TBLNAME
而不是#+RESULTS
?或者,第二个代码块是否可以将参数强制转换为org表而不是字符串?
2
通常,如果要使用Babel源块生成表格,则会生成二维向量。如果Clojure代码执行此操作而不是生成字符串,则无需更改代码中的任何内容。也许尝试寻找在Clojure中产生载体的方法?
—
wvxvw
@wvxvw感谢您的评论。我想我在这里有些困惑。我认为整个Point org模式都是纯文本。你所看到的就是你得到的。但是您似乎在暗示#+ RESULTS块后面有某种数据结构,它可以是String或某些嵌套的数据结构。
—
朱利安·查斯唐
不,那不是我要说的。我相信这
—
wvxvw
clojure.pprint/print-table
将返回一个格式化为Org表的字符串,并且由于您将标头参数设置为output
和raw
,因此您得到了。但是,当您第二次使用它时,Org不会读取结果表,而是会重新评估Clojure块并将其结果提供给Python块。但是,如果Clojure块生成了2D数组,则可以将结果更改为,value
而不是raw
Org将结果格式化为表格,然后将其作为Python块中的2D数组获取。
@wvxvw再次感谢您帮助我了解org-babel标头参数。经过一些试验,我可以看到您的描述确实确实是这种情况,我应该能够做到这一点。但是,看来我不能使用带hline的“更丰富”样式的组织表作为中间格式,因为它们是字符串而不是数据(例如,Clojure嵌套向量)表示形式。无论如何,我对org-babel非常满意,并认为它是Jupyter的替代产品(如果您是emacs用户,当然:-))再次感谢您的帮助。
—
朱利安·查斯唐