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).