http://www.perlmonks.org?node_id=1009032


in reply to Calling R in perl

I regularly use Statistics::R and it works great. You can put all of your R commands within your Perl script, or if you have a lot of R stuff to run, you can use it to specify variables and then run an entire external R script. The examples on the linked page are clear and helpful. Take a look at them and if you have any more questions, let me know.

EDIT: Here is a snippet from one of my Perl scripts which demonstrates setting variables, running R commands from within Perl, and running R scripts from within Perl. The only thing it is really missing is an example of retrieving a value from an R variable (e.g., $value_returned_from_R = $R->get('some.r.variable') ):

my $R = Statistics::R->new(); $R->set( 'filenames', \@filenames ); $R->set( 'id', $id ); $R->set( 'par1', $par1 ); $R->set( 'par2', $par2 ); $R->run_from_file( "genoplot_by_id.build_df.R" ); $R->run_from_file( "genoplot_by_id.build_plot.R" ); $R->run( qq`setwd("$plot_dir")` ); $R->run( qq`ggsave( filename = paste("$plot_path", "$plot_format", sep = "."), plot = geno.plot, width = $plot_width, height = $plot_height)` );

EDIT #2: A couple more examples... Using an array of R commands or a heredoc with multiple R commands (example taken from Statistics::R):

# Array of R commands: my $out1 = $R->run( q`a <- 2`, q`b <- 5`, q`c <- a * b`, q`print("ok")` ); # Here-doc with multiple R commands: my $cmds = <<EOF; a <- 2 b <- 5 c <- a * b print('ok') EOF my $out2 = $R->run($cmds);