Daha sonra diğer kod blokları tarafından tüketilecek kuruluş tabloları üreten kod blokları


9

Daha sonra diğer kod blokları tarafından tüketilecek org tabloları üreten kod blokları ile biraz sorun yaşıyorum. Örneğin:

#+NAME: upper_air
#+BEGIN_SRC clojure :results output raw
  (clojure.pprint/print-table table)
#+END_SRC 

üretecek

#+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 |

ama gerçekten istediğim şey

#+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 |

(not #+RESULTSvs. #+TBLNAME) daha sonra böyle bir şey yapabilirim

#+BEGIN_SRC ipython :session  :var data=upper_air
import numpy as np

arr = np.array(data)
p = arr[:,4]
#+END_SRC

İle #+RESULTSsonucu, ikinci kod bloğu yorumlayacaktır data bir dize yerine bir veri tablosu olarak argüman ve basit bir şekilde veri ayıklamak mümkün olmayacaktır. ASCII veri 'el ile' bir Python veri yapısına dönüştürebilirsiniz, ama org benim için işlemeyi tercih ediyorum :-) İlk kod bloğunun #+TBLNAMEyerine bir çıktı için bir yolu var mı #+RESULTS? Alternatif olarak, ikinci kod bloğu argümanı bir dize yerine bir org tablosu olarak zorlayabilir mi?


2
Normalde, bir Babel kaynak bloğunun bir tablo üretmesi amaçlanıyorsa, iki boyutlu bir vektör oluşturur. Clojure kodu bir dize oluşturmak yerine bunu yaptıysa, kodunuzdaki hiçbir şeyi değiştirmeniz gerekmez. Belki Clojure'da bir vektör üretmenin bir yolunu aramayı deneyin?
wvxvw

@wvxvw Yorum için teşekkürler. Sanırım burada biraz kafam karıştı. Tüm nokta org modunun düz metin olduğunu düşündüm. Ne görüyorsanız onu alırsınız. Ancak # + SONUÇLAR bloğunun arkasında bir String veya bazı iç içe veri yapısı olabilen bir çeşit veri yapısı olduğunu öne sürüyorsunuz.
Julien Chastang

2
Hayır, ben bunu söylemiyorum. clojure.pprint/print-tableOrg tablosu olarak biçimlendirilmiş bir dize döndürdüğüne inanıyorum ve başlık bağımsız değişkenini ayarladığınızdan outputve rawne elde ederseniz edin. Ancak, ikinci kez kullandığınızda Org sonuçta ortaya çıkan tabloyu okumaz, bunun yerine Clojure bloğunu yeniden değerlendirir ve sonucunu Python bloğuna besler. Clojure blok 2D dizi üretti Ancak, olmak sonucunu değiştirebilir valueve rawOrg Sonucun bir tablo olarak biçime ve Python bloğunda 2B dizi olarak tanınacak.
wvxvw

@wvxvw org-babel başlık argümanlarını anlamama yardımcı olduğunuz için tekrar teşekkür ederiz. Bazı deneylerden sonra, açıkladığınız şeyin gerçekten de öyle göründüğünü görebiliyorum ve bununla koşabilmeliyim. Ancak, bunlar özellikle (örneğin, Clojure iç içe vektör) temsiller değil, dizeleri ve özellikle ara satırlar olarak hlines ile "daha zengin" tarzı org tabloları kullanamıyorum görünmüyor. Her halükarda, org-babel'den çok mutlu oldum ve Jupyter'e (bir emacs kullanıcısıysanız, elbette :-)) üstün bir alternatif olduğunu düşünüyorum Yardımınız için tekrar teşekkürler.
Julien Chastang

Yanıtlar:


6

Tablo bloğunuzun böyle bir dizi (veya vektör veya liste vb.) Döndürmesi gerekir. Hiçbiri ile yatay çizgiler veya nil veya clojure'da herhangi bir eşdeğer türde alabilirsiniz.

#+NAME: upper_air
#+BEGIN_SRC python :results value
return [[":m", ":degree",":meter/second", ":degC", ":millibar"],
        None,
        [1545.0, 175.0, 12.36, 15.40001, 850.0],
        [3162.0, 265.0, 6.69, 4.8, 700.0]]

#+END_SRC

#+RESULTS: upper_air
|     :m | :degree | :meter/second |    :degC | :millibar |
|--------+---------+---------------+----------+-----------|
| 1545.0 |   175.0 |         12.36 | 15.40001 |     850.0 |
| 3162.0 |   265.0 |          6.69 |      4.8 |     700.0 | 


#+BEGIN_SRC python :results value  :var data=upper_air
import numpy as np

arr = np.array(data)
p = arr[:,4]
return p
#+END_SRC  

#+RESULTS:
| 850 | 700 |
Sitemizi kullandığınızda şunları okuyup anladığınızı kabul etmiş olursunuz: Çerez Politikası ve Gizlilik Politikası.
Licensed under cc by-sa 3.0 with attribution required.