나중에 다른 코드 블록에서 사용할 수 있도록 조직 테이블을 생성하는 코드 블록


9

나중에 다른 코드 블록에서 사용하도록 조직 테이블을 생성하는 코드 블록에 약간의 문제가 있습니다. 예를 들면 다음과 같습니다.

#+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#+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 데이터를 변환 할 수 있습니다,하지만 난 첫 번째 코드 출력 A 동 중 하나의 방법이 나 :-)에 대한 핸들을 조직 선호하는 #+TBLNAME대신이 #+RESULTS? 또는 두 번째 코드 블록이 문자열 대신 org 테이블로 인수를 강제 할 수 있습니까?


2
일반적으로 Babel 소스 블록이 테이블을 생성하려는 경우 2 차원 벡터를 생성합니다. Clojure 코드가 문자열을 생성하는 대신 코드를 작성했다면 코드에서 아무것도 변경할 필요가 없습니다. Clojure에서 벡터를 생성하는 방법을 찾으십니까?
wvxvw

@wvxvw 댓글 감사합니다. 나는 약간 혼란스러워 보인다. 전체 포인트 조직 모드가 일반 텍스트라고 생각했습니다. 당신이 보는 것은 당신이 얻는 것입니다. 그러나 # + REULTS 블록 뒤에는 일종의 데이터 구조가 있으며 문자열 또는 중첩 된 데이터 구조 일 수 있습니다.
Julien Chastang

2
아니, 그건 내가 말하는 게 아니야 나는 그것이 clojure.pprint/print-tableOrg 테이블 형식의 문자열 을 반환 한다고 생각하고 헤더 인수를 outputand로 설정했기 때문에 raw얻을 수있는 것을 얻습니다. 그러나 두 번째로 사용할 때 조직은 결과 테이블을 읽지 않고 대신 Clojure 블록을 다시 평가하고 결과를 Python 블록에 제공합니다. 그러나 Clojure 블록이 2D 배열을 생성 한 경우 결과를 테이블로 형식화하기 위해 Org가 value아닌 결과를 변경할 수 raw있으며 Python 블록에서 2D 배열로 얻을 수 있습니다.
wvxvw

@wvxvw org-babel 헤더 인수를 이해하도록 도와 주셔서 감사합니다. 몇 가지 실험을 한 후에, 당신이 묘사 한 것이 실제로 그럴 것 같음을 알 수 있으며, 그와 함께 실행할 수 있어야합니다. 그러나 데이터가 (예 : Clojure 중첩 벡터) 표현이 아닌 문자열이기 때문에 특히 hline과 함께 "풍부한"스타일의 org-table을 중간 형식으로 사용할 수 없습니다. 어쨌든, 나는 org-babel에 매우 만족했으며 Jupyter의 탁월한 대안이라고 생각합니다 (물론 emacs 사용자 인 경우 :-)) 다시 한 번 감사드립니다.
Julien Chastang

답변:


6

테이블 블록이 이와 같은 배열 (또는 벡터 또는 목록 등)을 반환하도록해야합니다. None 또는 nil 또는 clojure의 동등한 유형으로 수평선을 얻을 수 있습니다.

#+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 |
당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.