R::YapRI::Data::Matrix.pm
A module to build and pass a Matrix to a YapRI command file
use R::YapRI::Base; use R::YapRI::Data::Matrix; ## Constructors: my $rmatrix = R::YapRI::Data::Matrix->new({ name => 'matrix1' }); ## Accessors: my $matrixname = $rmatrix->get_name(); $rmatrix->set_name('matrix'); my $coln = $rmatrix->get_coln(); $rmatrix->set_coln(3); my $rown = $rmatrix->get_rown(); $rmatrix->set_rown(4); my @data = $rmatrix->get_data(); $rmatrix->set_data(\@data); my @colnames = $rmatrix->get_colnames(); $rmatrix->set_colnames(\@colnames); my @rownames = $rmatrix->get_colanmes(); $rmatrix->set_colnames(\@rownames); ## Adding/deleting/changing data: $rmatrix->set_coldata($colname, [$y1, $y2, $y3, $y4]); $rmatrix->set_rowdata($rowname, [$x1, $x2, $x3]); $rmatrix->add_column($colname, [$yy1, $yy2, $yy3, $yy4]); $rmatrix->add_row($rowname, [$xx1, $xx2, $xx3]); my @oldcol = $rmatrix->remove_column($colname); my @oldrow = $rmatrix->remove_row($rowname); $rmatrix->change_columns($col_x, $col_z); $rmatrix->change_rows($row_x, $row_z); ## Parsers: my $rbase = R::YapRI::Base->new(); $rmatrix->send_rbase($rbase, $mode); $rmatrix = R::YapRI::Data::Matrix->read_rbase($rbase, $block, $r_object_name); ## Slicers: my @col2 = $rmatrix->get_column($col_y); my @row3 = $rmatrix->get_row($row_x); my $elem2_3 = $rmatrix->get_element($row_x, $col_y);
R::YapRI::Data::Matrix is a R::YapRI to manipulate matrices, send to an rbase object (R::YapRI::Base) for further R manipulations.
This module pass perl variables to a R::YapRI::Data::Matrix object that convert them in a R command line that it is passed to R::YapRI::Base object as a block.
+-----------+ +----------------------+ +------------+ +---+--------+ | PerlData1 | => | YaRI::Data::Matrix 1 | => | | => | | Input | +-----------+ +----------------------+ | YaRI::Base | | R |--------+ | PerlData2 | <= | YaRI::Data::Matrix 2 |<= | | <= | | Output | +-----------+ +----------------------+ +------------+ +---+--------+
It lets export data to R frame as: matrix (default), data.frames, vector (by_rows or by_columns) and list (by_rows or by_columns).
Rbase communication is based in two functions:
+ send_rbase, to add the matrix to a rbase block.
+ read_rbase, to create a R::YapRI::Data::Matrix based in a R matrix contained in a rbase block.
Aureliano Bombarely <aurebg@vt.edu>
The following class methods are implemented:
Usage: my $rmatrix = R::YapRI::Data::Matrix->new(); Desc: Create a new R::YapRI::Data::Matrix object Ret: a R::YapRI::Data::Matrix object Args: A hash reference with the following parameters: name => a scalar with the matrix name, coln => a scalar with the column number (int), rown => a scalar with the row number (int), colnames => an array ref. with the column names, rownames => an array ref. with the row names, data => an array ref. with the matrix data ordered by row. Side_Effects: Die if the argument used is not a hash or its values arent right. If no coln and rown are used, it will set to 0 by default. Example: my $rmatrix = R::YapRI::Data::Matrix->new( { name => 'matrix1', coln => 3, rown => 4, colnames => ['a', 'b', 'c'], rownames => ['W', 'X', 'Y', 'Z'], data => [ 1, 1, 1, 2, 2, 2, 3, 3, 3, 4, 4, 4,], } );
Usage: my $name = $matrix->get_name(); Desc: Get the Matrix name for a R::YapRI::Data::Matrix object Ret: $name, a scalar Args: None Side_Effects: None Example: my $name = $matrix->get_name();
Usage: $matrix->set_name($name); Desc: Set the Matrix name for a R::YapRI::Data::Matrix object Ret: None Args: $name, an scalar Side_Effects: Die if undef value is used Example: $matrix->set_name($name);
Usage: my $coln = $matrix->get_coln(); Desc: Get the matrix column number for a R::YapRI::Data::Matrix object Ret: $coln, a scalar Args: None Side_Effects: None Example: my $coln = $matrix->get_coln();
Usage: $matrix->set_coln($coln); Desc: Set the matrix column number for a R::YapRI::Data::Matrix object Ret: None Args: $coln, an scalar Side_Effects: Die if undef value is used. Die if colnum number is not a digit Example: $matrix->set_coln($coln);
Usage: my $rown = $matrix->get_rown(); Desc: Get the matrix row number for a R::YapRI::Data::Matrix object Ret: $rown, a scalar Args: None Side_Effects: None Example: my $rown = $matrix->get_rown();
Usage: $matrix->set_rown($rown); Desc: Set the matrix row number for a R::YapRI::Data::Matrix object Ret: None Args: $rown, an scalar Side_Effects: Die if undef value is used. Die if rown number is not a digit Example: $matrix->set_rown($rown);
Usage: my $colnames_aref = $matrix->get_colnames(); Desc: Get the Matrix column names array for a R::YapRI::Data::Matrix object Ret: $colnames_aref, an array reference with the column names Args: None Side_Effects: None Example: my @colnames = @{$matrix->get_colnames()};
Usage: $matrix->set_colnames(\@colnames); Desc: Set the matrix column names array for a R::YapRI::Data::Matrix object Ret: None Args: $col_names_aref, an array reference with the column names Side_Effects: Die if undef value is used Die if argument is not an array reference. Die if number of element in the array isnt equal to coln value. (except if colnumber is empty) Example: $matrix->set_colnames(['col1', 'col2']);
Usage: my $rownames_aref = $matrix->get_rownames(); Desc: Get the Matrix row names array for a R::YapRI::Data::Matrix object Ret: $rownames_aref, an array reference with the row names Args: None Side_Effects: None Example: my @rownames = @{$matrix->get_rownames()};
Usage: $matrix->set_rownames(\@rownames); Desc: Set the matrix row names array for a R::YapRI::Data::Matrix object Ret: None Args: $row_names_aref, an array reference with the row names Side_Effects: Die if undef value is used Die if argument is not an array reference. Die if number of element in the array isnt equal to rown value. (except if rownumber is empty) Example: $matrix->set_rownames(['row1', 'row2']);
Usage: my $data_aref = $matrix->get_data(); Desc: Get the matrix data array for a R::YapRI::Data::Matrix object. The data is stored as an array ordered by rows. Example: Matrix |1 2 3| => [1, 2, 3, 4, 5, 6] |4 5 6| Ret: $data_aref, an array reference with the data as array Args: None Side_Effects: None Example: my @data = @{$matrix->get_data()};
Usage: $matrix->set_data(\@data); Desc: Set the matrix data array for a R::YapRI::Data::Matrix object Ret: None Args: $data, an array reference with the data ordered by rows Example: Matrix |1 2 3| => [1, 2, 3, 4, 5, 6] |4 5 6| Side_Effects: Die if undef value is used Die if argument is not an array reference. Die if number of element in the array isnt equal to coln x rown (for example if coln=3 and rown=2, it should have 6 elements) Example: $matrix->set_data([1, 2, 3, 4]);
Usage: my $index_href = $matrix->_get_indexes(); Desc: Get then matrix indexes for columns and rows, with the following format: $index_href = { $row,$col => $array_element } Ret: $index_href, a hash reference with the matrix indexes. Args: None Side_Effects: None Example: my %indexes = @{$matrix->_get_indexes()};
Usage: my $revindex_href = $matrix->_get_rev_indexes(); Desc: Get then matrix indexes for columns and rows, with the following format: $index_href = { $array_element => [ $row, $col ] } Ret: $rindex_href, a hash reference with the matrix indexes. Args: None Side_Effects: None Example: my %revindexes = %{$matrix->_get_rev_indexes()};
Usage: $matrix->_set_indexes(\%indexes); Desc: Set the matrix indexes for the data contained in the matrix Ret: None Args: \%indexes, a hash reference with key=$row,$col and value=$arrayposition Side_Effects: Die if undef value is used Die if argument is not an hash reference. Die if number of element in the hash isnt equal to coln x rown (for example if coln=3 and rown=2, it should have 6 elements) Example: $matrix->set_data([1, 2, 3, 4]);
Usage: my %index_matrix = $self->_index_matrix(); Desc: Index the matrix with an array to know segment the matrix in elements %index_matrix = ( $arrayposition => { row => $rowposition, col => $colposition }); Ret: The index matrix, a hash with the following elements: %index_matrix = ( $arrayposition => { $rowposition, $colposition }) Args: None Side_Effects: None Example: my %index_matrix = $self->_index_matrix();
Usage: $rmatrix->_no_duplicate_names($method); Desc: Check if there are duplicate names for col or rows. Die if exists duplicates. Ret: None Args: $method, a scalar that can have 'col', 'row' or 'all'. (all by default) Side_Effects: Overwrite methods that are not 'col' or 'row' with 'all'. Die if it find duplicates. Example: $rmatrix->_no_duplicate_names('col');
Usage: $rmatrix->set_coldata($colname, \@col_data); Desc: Add data to an existing column, overwriting the old data Ret: None Args: $colname, a scalar with the name of the column $coldata_aref, an array ref. with the data of the column Side_Effects: Die if no colname is used. Die if the number of elements in the data array is different than the rown Example: $rmatrix->set_coldata('col1', [1, 2]); $rmatrix->set_coldata($colnames[0], [1, 2]);
Usage: $rmatrix->set_rowdata($rowname, \@row_data); Desc: Add data to an existing row, overwriting the old data Ret: None Args: $colname, a scalar with the name of the row, $rowdata_aref, an array ref. with the data of the row Side_Effects: Die if no rowname is used. Die if the number of elements in the data array is different than the column Example: $rmatrix->set_rowdata('row1', [1, 2]); $rmatrix->set_rowdata($rownames[0], [1, 2]);
Usage: $rmatrix->add_column($colname, \@col_data); Desc: Add a new column to the object, rebuilding the indexes and edinting column number Ret: None Args: $colname, a scalar with the name of the column $coldata_aref, an array ref. with the data of the column Side_Effects: Die if the number of elements in the data array is different than the row number Rebuild and reset the matrix indexes and the coln. Example: $rmatrix->add_column('col1', [1, 2]);
Usage: $rmatrix->add_row($rowname, \@row_data); Desc: Add a new row to the object, rebuilding the indexes and edinting row number Ret: None Args: $rowname, a scalar with the name of the row $rowdata_aref, an array ref. with the data of the row Side_Effects: Die if the number of elements in the data array is different than the col number Rebuild and reset the matrix indexes and the rown. Example: $rmatrix->add_row('row3', [1, 2]);
Usage: my @coldata = $rmatrix->delete_column($colname); Desc: Delete a column to the object, rebuilding the indexes and edinting column number Ret: @coldata, an array with the column data deleted Args: $colname, a scalar with the name of the column Side_Effects: Die if the column doesnt exist. Rebuild indexes and reset coln. Example: my @coldata = $rmatrix->delete_column('col1');
Usage: my @rowdata = $rmatrix->delete_row($rowname); Desc: Delete a row to the object, rebuilding the indexes and edinting row number Ret: @rowdata, an array with the row data deleted Args: $rowname, a scalar with the name of the row Side_Effects: Die if the row doesnt exist. Rebuild indexes and reset rown. Example: my @rowdata = $rmatrix->delete_row('row1');
Usage: $rmatrix->change_columns($colname1, $colname2); Desc: Change the order of two columns Ret: None Args: $colname1, column name 1, $colname2, column name 2, Side_Effects: Die if the any of the column names used doesnt exist. Example: $rmatrix->change_columns('col1', 'col2');
Usage: $rmatrix->change_rows($rowname1, $rowname2); Desc: Change the order of two rows Ret: None Args: $rowname1, row name 1, $rowname2, row name 2, Side_Effects: Die if the any of the row names used doesnt exist. Example: $rmatrix->change_rows('row1', 'row2');
Usage: my $newmatrix = $rmatrix->matrix($matrixname); Desc: Create a new matrix executing a transpose over the original matrix Ret: $newmatrix, a R::YapRI::Data::Matrix object Args: $matrixname, a new matrix name Side_Effects: Use tr_ . $rmatrix->get_name as default name. Example: my $newmatrix = $rmatrix->matrix();
Usage: my @column = $rmatrix->get_column($colname); Desc: Get the column data for a concrete columnname Ret: @column, an array with the column data Args: $colname, a scalar with the column name Side_Effects: return an empty array if the column doesnt exist Example: my @column2 = $rmatrix->get_column('column2');
Usage: my @row = $rmatrix->get_row($rowname); Desc: Get the row data for a concrete rowname Ret: @row, an array with the row data Args: $rowname, a scalar with the row name Side_Effects: return an empty array if the row doesnt exist Example: my @row3 = $rmatrix->get_row('row3');
Usage: my $element = $rmatrix->get_element($rowname, $colname); Desc: Get the matrix element for concrete $rowname, $colname pair Ret: $element, a scalar with the element value Args: $rowname, a scalar with the row name $colname, a scalar with the column name Side_Effects: return undef if the row or/and column doesnt exist Example: my $element = $rmatrix->get_element($rowname, $colname);
Usage: my $cmd = $rmatrix->_matrix_cmd(); Desc: Build the command to add a new matrix Ret: $cmd, a string with the R command Args: None Side_Effects: None Example: my $cmd = $rmatrix->_matrix_cmd();
Usage: my $cmd = $rmatrix->_dataframe_cmd(); Desc: Build the command to add a new dataframe to R block Ret: $cmd, a string with the R command Args: None Side_Effects: If the column names are numeric (f.example: 1), it will add an X before (R doesnt accept numeric column names) Example: my $cmd = $rmatrix->_dataframe_cmd();
Usage: my $cmds_aref = $rmatrix->_rowvectors_cmd(); Desc: Build the command to add a list of vectors, parsing the matrix by rows Ret: $cmds_aref, an array ref. with strings with the R command Args: None Side_Effects: Create as many vectors as rows has the matrix, with the row names as vector names. If the row names are numeric, it will add an 'X' before the number (for example, 67 will be X67). Example: my @cmds = @{$rmatrix->_rowvectors_cmd()};
Usage: my $cmds_aref = $rmatrix->_colvectors_cmd(); Desc: Build the command to add a list of vectors, parsing the matrix by columns Ret: $cmds_aref, an array ref. strings with the R command Args: None Side_Effects: Create as many vectors as cols has the matrix, with the col names as vector names. If the col names are numeric, it will add an 'X' before the number (for example, 67 will be X67). Example: my @cmds = @{$rmatrix->_colvectors_cmd()};
Usage: $rmatrix->send_rbase($rbase, $block, $mode); Desc: Load the matrix data as a block in a rbase object (R::YapRI::Base) The R matrix name will the same than the perl matrix name. If block argument is used, it will add the command to this block. If block argument is undef or empty, it will create a new block with the argument name Ret: None Args: $rbase, a R::YapRI::Base object, $block, block to create or add the data, an undef or empty value will create a new block with the matrix name. $mode, a scalar with the following possible values matrix, dataframe vectors_by_row and vectors_by_col (optional, matrix by default) Side_Effects: Die if no rbase object is used or if the argument used is not a R::YapRI::Base object Example: ## Default mode (R matrix in a new block with name=matrix_name) $rmatrix->send_rbase($rbase); ## Adding a matrix to BLOCK1 $rmatrix->send_rbase($rbase, 'BLOCK1'); ## Adding a data.frame to GRAPH1 $rmatrix->send_rbase($rbase, 'GRAPH1', 'dataframe'); ## Adding as vectors by row to a matrix name block $rmatrix->send_rbase($rbase, '', 'vectors_by_row');
Usage: my $rmatrix = R::YapRI::Data::Matrix->read_rbase( $rbase, $block, $r_object_name); Desc: Create a new block with some R functions to get the data from the matrix. Combine it with the base block, run it and get the resultsfile. Parse the resultfile and get the data from it, loading it in a new matrix object. Ret: A new matrix object (R::YapRI::Data::Matrix) Args: $rbase, a R::YapRI::Base object, $block, a scalar with the name of the block that contains the R object to be read $r_object_name, name of the r_object to read Side_Effects: Die if no rbase object, block name or r_object_name is used. Die if rbase objects isnt a R::YapRI::Base object Die if block doesnt exist in the R::YapRI::Base object Die if the r_object_name doesnt exist in the R block used Die if the r_object_name isnt a matrix object. Example: my $rmatrix = R::YapRI::Data::Matrix->read_rbase( $rbase, 'BLOCK1', 'mymatrix');
Lukas Mueller
Robert Buels
Naama Menda
Jonathan "Duke" Leto
Copyright 2011 Boyce Thompson Institute for Plant Research
Copyright 2011 Sol Genomics Network (solgenomics.net)
This program is free software; you can redistribute it and/or modify it under the same terms as Perl itself.
To install R::YapRI, copy and paste the appropriate command in to your terminal.
cpanm
cpanm R::YapRI
CPAN shell
perl -MCPAN -e shell install R::YapRI
For more information on module installation, please visit the detailed CPAN module installation guide.