NAME

R::YapRI::Interpreter.pm

A module to transform perl variables into R command lines to define simple objs.

SYNOPSIS

use R::YapRI::Base;
use R::YapRI::Interpreter::Perl qw/r_var/;

my $perl_var = [1, 2, 3];
my $r_var = r_var($perl_var);  

DESCRIPTION

A interpreter to translate Perl variables into R commands for R::YapRI::Base

+==================+==============+===============================+
|  PERL VARIABLE   |  R VARIABLE  | Example                       |
+==================+==============+===============+===============+
| undef            | NULL         | $px = undef   | rx <- NULL    |
+------------------+--------------+---------------+---------------+
| empty ('' or "") | NA           | $px = ''      | rx <- NA      |
+------------------+--------------+---------------+---------------+
| integer          | numeric      | $px = 12      | rx <- 12      |
+------------------+--------------+---------------+---------------+
| bigint,bigfloat  | numeric      | $px = '-1.2'  | rx <- -1.2    |
+------------------+--------------+---------------+---------------+
| word 'TRUE'      | TRUE         | $px = 'TRUE'  | rx <- TRUE    |
+------------------+--------------+---------------+---------------+
| word 'FALSE'     | FALSE        | $px = 'FALSE' | rx <- FALSE   |
+------------------+--------------+---------------+---------------+
| any other word   | character    | $px = "sun"   | rx <- "sun"   |
+------------------+--------------+---------------+---------------+
| ARRAY REF.       | vector       | $px = [1, 2]  | rx <- c(1, 2) |
+------------------+--------------+---------------+---------------+
| HASH REF.        | object       | see below (*)                 |
+------------------+--------------+-------------------------------+
       

* R object or R function without arguments

$px = { a => undef }, will be just 'a'  
$px = { mass => '' }, will be just 'mass'

* R simple object with arguments

$px = { '' => { x => 2 }}, will be 'x = 2'
$px = { '' => { x => [2, 4] }}, will be 'x = c(2, 4)

* R functions with arguments

$px = { log  => 2  }, will be 'log(2)'
$px = { log  => [2, { base => 10 }] }, will be 'log(2, base = 10 )'
$px = { t    => {x => ''} }, will be 't(x)'
$px = { plot => [{ x => ''}, { main => "TEST"} ]}, will be:
       plot(x, main = "TEST")

Use array ref. to order the arguments in a function.

Use hash ref keys to define an argument in an R function

For more complex data structures, use R::YapRI::Data::Matrix.

AUTHOR

Aureliano Bombarely <aurebg@vt.edu>

CLASS METHODS

The following class methods are implemented:

_rvar_noref

Usage: my $r_string = _r_var_noref($perl_var); 

Desc: Internal function to parse a single non-reference perl variable
      (scalar). Equivalence table:
      
      +==================+==============+=============================+
      |  PERL VARIABLE   |  R VARIABLE  | Example                     |
      +==================+==============+===============+=============+
      | undef            | NULL         | $px = undef   | rx <- NULL  |
      +------------------+--------------+---------------+-------------+
      | empty ('' or "") | NA           | $px = ''      | rx <- NA    |
      +------------------+--------------+---------------+-------------+
      | integer          | numeric      | $px = 12      | rx <- 12    |
      +------------------+--------------+---------------+-------------+
      | bigint,bigfloat  | numeric      | $px = '-1.2'  | rx <- -1.2  |
      +------------------+--------------+---------------+-------------+
      | word 'TRUE'      | TRUE         | $px = 'TRUE'  | rx <- TRUE  |
      +------------------+--------------+---------------+-------------+
      | word 'FALSE'     | FALSE        | $px = 'FALSE' | rx <- FALSE |
      +------------------+--------------+---------------+-------------+
      | any other word   | character    | $px = "sun"   | rx <- "sun" |
      +------------------+--------------+---------------+-------------+

Ret: $r_string, a scalar with the perl2R variable translation

Args: $perl_var, could be, a scalar or an array reference

Side_Effects: Die if is used a perl reference.

Example: my $rvar = _rvar_noref(12);

_rvar_vector

Usage: my $r_arg = _rvar_vector($arrayref); 

Desc: Internal function to convert an perl array into a R vector

Ret: $r_arg, a scalar with the perl2R variable translation

Args: $arrayref, with the argument list

Side_Effects: Die if the argument is not an arrayref.

Example: my $r_vector = _rvar_vector($arrayref);

_rvar_arg

Usage: my $r_arg = _rvar_arg($hashref); 

Desc: Internal function to convert an argument in a function in the following
      way:
       2                              ===> '2'
       'YES'                          ===> '"YES"'
       [2, 3]                         ===> 'c(2, 3)'
       { x      => undef }            ===> 'x'
       { type   => "p"   }            ===> 'type = "p"'
       { col    => ["blue", "green"]} ===> 'col = c("blue", "green")'
       { labels => { x => undef } }   ===> 'labels = x'

      Something different from that, will die.

Ret: $r_arg, a scalar with the perl2R variable translation

Args: $hashref, with the argument list

Side_Effects: Die if the argument is not: scalar, array ref or a hash 
              reference.

Example: my $arg = _rvar_arg({ type => "p" });

r_var

Usage: my $r_string = r_var($perl_var); 

Desc: Parse a perl variable and return a string with the r variable format, 
      For perl-non reference variables, see _rvar_noref

      +==================+=================+==============================+
      |  PERL VARIABLE   |  R VARIABLE     | Example                      |
      +==================+=================+==============+===============+
      | ARRAY REF.       | vector          | $px = [1, 2] | rx <- c(1, 2) |
      +------------------+-----------------+--------------+---------------+
      | HASH REF.        | object/function | see below                    |
      +------------------+-----------------+------------------------------+
      
      * R object or R function without arguments

      $px = { a => undef }, will be just 'a'  
      $px = { mass => '' }, will be just 'mass'

      * R simple object with arguments

      $px = { '' => { x => 2 }}, will be 'x = 2'
      $px = { '' => { x => [2, 4] }}, will be 'x = c(2, 4)

      * R functions with arguments 

      $px = { log  => 2  }, will be 'log(2)'
      $px = { log  => [2, { base => 10 }] }, will be 'log(2, base = 10 )'
      $px = { t    => {x => ''} }, will be 't(x)'
      $px = { plot => [{ x => ''}, { main => "TEST"} ]}, will be:
              plot(x, main = "TEST")

      Use array ref. to order the arguments in a function.
      Use hash ref keys to define an argument in an R function      


Ret: $r_string, a scalar with the perl2R variable translation

Args: $perl_var, could be, a scalar or an array reference

Side_Effects: Die if the reference used is not a ARRAY REF or HASH REF.

Example: my $rvar = r_var([1, 2, 3, "TRUE", "last word"]);

ACKNOWLEDGEMENTS

Lukas Mueller

Robert Buels

Naama Menda

Jonathan "Duke" Leto

COPYRIGHT AND LICENCE

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.