From 18f072b720e25af71e4538c56053640fd2747bc2 Mon Sep 17 00:00:00 2001 From: AJ Rossini Date: Sun, 12 Apr 2009 13:18:55 +0200 Subject: [PATCH] API cleanup, listoflist->array (new) listoflist->dataframe (mods) Signed-off-by: AJ Rossini --- src/data/listoflist.lisp | 83 ++++++++++++++++++++---------------------------- 1 file changed, 35 insertions(+), 48 deletions(-) diff --git a/src/data/listoflist.lisp b/src/data/listoflist.lisp index df65c00..bb8aed1 100644 --- a/src/data/listoflist.lisp +++ b/src/data/listoflist.lisp @@ -1,6 +1,6 @@ ;;; -*- mode: lisp -*- -;;; Time-stamp: <2009-03-21 09:30:48 tony> +;;; Time-stamp: <2009-04-11 19:01:27 tony> ;;; Creation: <2008-09-08 08:06:30 tony> ;;; File: listoflist.lisp ;;; Author: AJ Rossini @@ -62,35 +62,47 @@ justify further processing and initial conditions." T nil)) +(defun listoflist->array (lol &key (type 'row-major)) + "From a listoflists structure, make an array. + +FIXME: need to verify that the listoflists is a valid structure (same +size rows, typing if required, etc. + + + (defparameter *mdfl-test* + (list (list 'a 1 2.1) + (list 'b 2 1.1) + (list 'c 1 2.0) + (list 'd 2 3.0))) + (length *mdfl-test*) + (length (elt *mdfl-test* 0)) + + (defparameter *mdfl-test-dt* (make-datatable-from-listoflists *mdfl-test*)) + (array-dimensions *mdfl-test-dt*) +" + (let ((n (length lol)) + (p (length (elt lol 0)))) + (let ((result (make-array (list n p)))) + (dotimes (i n) + (dotimes (j p) + (if (equal type :row-major) + (setf (aref result i j) (elt (elt lol i) j)) + (setf (aref result i j) (elt (elt lol j) i))))) + result))) + + ;; the following will be handy to help out folks adjust. It should ;; provide a means to write code faster and better. -(defmacro make-dataframe-from-listoflist (datasetname - &optional (force-overwrite nil) - &rest lists-of-data-lists) +(defun listoflist->dataframe (lol) ; &key (type :row-major)) "Create a cases-by-variables data frame consisting of numeric data, from a ROW-MAJOR list-of-lists representation. A COLUMN-MAJOR representation should be handled using the transpose-listoflists function." - (if (or (not (boundp datasetname)) - force-overwrite) - (if (lists-of-same-size lists-of-data-lists) - `(defparameter ,datasetname - (make-matrix (length iron) 2 - :initial-contents - (mapcar #'(lambda (x y) - (list (coerce x 'double-float) - (coerce y 'double-float))) - ,@lists-of-data-lists))) - (error "make-data-set-from-lists: no combining different length lists")) - (error "make-data-set-from-lists: proposed name exists"))) + (if (lists-of-same-size lol) + (make-dataframe (listoflist->array lol)) + (error "make-data-set-from-lists: no combining different length lists")) + (error "make-data-set-from-lists: proposed name exists")) -#| -(macroexpand '(make-data-set-from-lists - this-data - :force-overwrite nil - aluminum iron)) -(princ this-data) -|# (defun transpose-listoflist (listoflist) "This function does the moral-equivalent of a matrix transpose on a @@ -113,31 +125,6 @@ return T/nil based on equality." )) -(defun make-array-from-listoflist (lol) ; &key (type 'row-major) - "From a listoflists structure, make an array. - -FIXME: need to verify that the listoflists is a valid structure (same -size rows, typing if required, etc. - - - (defparameter *mdfl-test* - (list (list 'a 1 2.1) - (list 'b 2 1.1) - (list 'c 1 2.0) - (list 'd 2 3.0))) - (length *mdfl-test*) - (length (elt *mdfl-test* 0)) - - (defparameter *mdfl-test-dt* (make-datatable-from-listoflists *mdfl-test*)) - (array-dimensions *mdfl-test-dt*) -" - (let ((n (length lol)) - (p (length (elt lol 0)))) - (let ((result (make-array (list n p)))) - (dotimes (i n) - (dotimes (j p) - (setf (aref result i j) (elt (elt lol i) j)))) - result))) #| (defparameter *mdfl-test* -- 2.11.4.GIT