Advertisement
Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- #lang racket
- (define (make-data-frame . args)
- (let* ([column-names (list->vector (map car args))]
- [data-store (list->vector (map (compose list->vector cdr) args))])
- (define (get-row n)
- (vector-map
- (λ (v) (vector-ref v n))
- data-store))
- (define (get-data-length)
- (vector-length (vector-ref data-store 0)))
- (define (format-row n)
- (define (default-format-function x)
- (~a x
- #:max-width 8
- #:min-width 8
- #:limit-marker "…"
- #:align 'center
- #:left-pad-string " "
- #:right-pad-string " "))
- (let* ([nth-row (get-row n)]
- [formatted (vector-map default-format-function nth-row)])
- (string-append* (vector->list formatted))))
- (define (format-first-rows n)
- (string-join
- (map format-row (range n))
- "\n"))
- (define (format-column)
- (define (default-format-function x)
- (~a x
- #:max-width 8
- #:min-width 8
- #:limit-marker "…"
- #:align 'center
- #:left-pad-string " "
- #:right-pad-string " "))
- (let* ([column-formatted (vector-map default-format-function column-names)]
- [column-string (string-append* (vector->list column-formatted))])
- (string-append
- column-string "\n"
- (make-string (string-length column-string) #\―))))
- (define (show-columns)
- (display (format-column)) (display "\n"))
- (define (show-row n)
- (display (format-row n))
- (display "\n"))
- (define (show-rows [n 10])
- (display (format-first-rows (min n (get-data-length))))
- (display "\n"))
- (define (show-data [n 10])
- (show-columns)
- (show-rows n))
- (case-lambda
- [() (show-data)]
- [(op)
- (match op
- ['show-columns (show-columns)]
- ['show (show-data)]
- ['length (get-data-length)]
- ['columns column-names]
- ['data-store data-store]
- )]
- [(op n)
- (match `(,op ,n)
- [(list 'show-row n)
- (show-columns)
- (show-row (sub1 n))]
- [(list 'show 'all)
- (show-data (get-data-length))]
- [(list 'show n)
- (show-data n)]
- )])
- ))
- (define df (make-data-frame `[x . ,(range 100)] `[y . ,(range 100)]))
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement