kantica has asked for the wisdom of the Perl Monks concerning the following question:

Hello everyone! I am a student and I am learning Perl. For my project I am writing a script whose output is a .csv file and I would like to call an R script from the Perl script so I could show the results from my .csv in a graph. I have a code which works in R:

setwd("C://PerlProject") # loading data into R indata <- read.table ("result.csv", colClasses=c(NA,"NULL","NULL",NA,N +A,NA,NA,NA,NA), header = TRUE, sep = ",") # load the stats package library(stats) mydata <- indata[,2:8] ir_pca <- prcomp(mydata, center = TRUE, scale. = TRUE) scrs <-ir_pca$x[, 1:2] pdf("plots.pdf", width=16, height=16) plot(scrs) text( scrs, rownames( indata ), pos= 3 ) dev.off()
but I am having real troubles integrating it in my Perl script. I've instaled the Statistics::R package, but when I tried to put these commands in the $R <- run () way, I just get a bunch of errors. Could anyone at least give me some tips how to go around it? Thank you so much! p.s. The file 'result.csv' is a variable $result in Perl, I am not sure how to connect these too?

Replies are listed 'Best First'.
Re: Help integrating R code into Perl code
by poj (Abbot) on Jun 18, 2016 at 15:31 UTC
    See Calling R in perl. If you have a working R script then you should be able to use
    #!perl use strict; use Statistics::R; my $R = Statistics::R->new(); $R->run_from_file( 'c:/folder/myprogram.R' );
    poj
      Thank you so much! After I've updated the Win32API::File this worked, although I still have two warnings which I am trying to work out: "Warning: unable to close filehandle GEN25 properly: Bad file descriptor at C:/Strawberry/perl/vendor/lib/IPC/Run/Win32IO.pm line 126."
        A few things to try any-or-all-of:
        1. Since this is a warning from a library you didn't write, you can silence warnings from it by enclosing it in a block and turning off warnings in the dynamic scope.
          {
            local $^W = 0;
            call_library_that_warns();
          }
        2. Make a very small example that warns- perhaps running a "Hello World" R script- and post a bug report. It could be a bug in either Statistics::R or Win32API::File - but since the example would start with R, then I'd start by reporting there.
        3. If you're ambitious and have time, run that small example script in the debugger shell "perl -d Hello_World_r.pl", and try to find out more about the problem, and perhaps create a patch you can send to the appropriate party...
Re: Help integrating R code into Perl code
by Anonymous Monk on Jun 18, 2016 at 13:51 UTC
Re: Help integrating R code into Perl code
by perlfan (Parson) on Jun 22, 2016 at 13:17 UTC