NAME

Bio::Gonzales::Matrix::IO - Library for simple matrix IO

SYNOPSIS

use Bio::Gonzales::Matrix::IO qw(lspew mslurp lslurp mspew);

DESCRIPTION

Provides functions for common matrix/list IO.

SUBROUTINES

dict_slurp($filename, \%options)
%options = (
  sep     => qr/\t/,
  header  => 0,
  skip    => -1,
  comment => qr/^\s*#/,
  key_idx => 0,
  val_idx => undef,
  uniq    => 0,
  record_filter => undef,
  concat_keys => 1,
  strict => 0
);

Setups:

uniq = 1 && no val_idx => read in key_idx as hash and set values to 1
uniq = 0 && no val_idx => read in key_idx as hash and set values to the count of keys
uniq = 1 && val_idx => read into ( key => [ @values ], ...)
uniq = 0 && val_idx => read into ( key => [ [ @values ], [ @more_values ] ], ...)
concat_keys

Concatenate the keys by $;. If set to 0, key columns are taken in a serial fashion and are merged to one big column.

uniq = 1 && strict = 1 => confess if two times the same key occurs in the data.

If key_idx is an array, the keys columns are joined by $; to build the hash key.

mspew($filename, \@matrix, \%options)
mspew($filehandle, \@matrix, \%options)

Save the values in @matrix to a $filename or $filehandle. @matrix is an array of arrayrefs:

@matrix = (
    [ l11, l12, l13 ],
    [ l21, l22, l23 ],
    [ l31, l32, l33 ]
);

Options:

header / ids

Supply a header. Same as

mspew($file, [ \@header, @matrix ])
row_names

Supply row names or if not an array but true, use the header as row names

mspew( $file, $matrix, { row_names => 1 } );                            #use header
mspew( $file, $matrix, { row_names => [ 'row1', '...', 'rown' ] } );    #use supplied row names
fill_missing_cols

If a row has less columns than the longest row of the matrix, fill it up with empty strings.

na_value

Use this value in case undefined values are found. Default is 'NA'.

sep

Set a separator for the output file

square (default 1)

Add empty columns to fill up to a square.

$matrix_ref = mslurp($file, \%config)
($matrix_ref, $header_ref, $row_names_ref) = mslurp($file, \%config)

Reads in the contents of $file and puts it in a array of arrayrefs.

You can set the delimiter via the configuration by supplying { sep => qr/\t/ } as config hash.

Further options with defaults:

%config = (
    sep => qr/\t/, # set column separator
    header => 0, # parse header
    skip => 0, # skip the first N lines (without header)
    row_names => 0, # parse row names
    comment => qr/^\s*#/ # the comment character
    record_filter => undef # set a function to filter records
);
lspew($fh_or_filename, $list, $config_options)

spews out a list of values to a file. It can handle filenames and filehandles, but if you supply a handle, you have to close it on your own. The $list can be a

hash ref of array refs

results in keya avalue0 avalue1 keyb bvalue0 bvalue1 ...

hash ref

results in keya valuea keyb valueb ...

array ref

results in value0 value1 ...

$config_options is a hash ref. It can take the options:

$config_options = {
    delim => "\t",
};

SEE ALSO

AUTHOR

jw bargsten, <joachim.bargsten at wur.nl>