1.3.3 Lists and vectors🔗ℹ

Racket’s own data needs no conversion: every fit and prediction procedure takes rows as a list or a vector of lists or vectors, and a response as a list, vector, flvector or f64vector. The outer sequence always holds the rows, and every nesting fits as the same lists do:

Rows

  

Example

list of lists

  

'((1.0 2.0) (2.0 1.0))

list of vectors

  

(list #(1.0 2.0) #(2.0 1.0))

vector of lists

  

(vector '(1.0 2.0) '(2.0 1.0))

vector of vectors

  

#(#(1.0 2.0) #(2.0 1.0))

> (define rows '((1.0 2.0) (2.0 1.0) (3.0 4.0) (4.0 3.0) (5.0 6.0)))
> (define response '(1.2 3.9 3.1 5.8 5.1))
> (for/list ([X (list (map list->vector rows)
                      (list->vector rows)
                      (list->vector (map list->vector rows)))])
    (equal? (ols X response) (ols rows response)))

'(#t #t #t)

> (equal? (ols rows (list->vector response)) (ols rows response))

#t

> (predict (ols rows response) (vector #(6.0 5.0) '(0.0 1.0)))

'(7.759973838047118 0.2233555313539597)

glmnet/data/nested converts any nesting to a design matrix and back (see The explicit route).