Hi, For example, I have several variables in php, like var1 = 1, 2, 3, 5, 6 var2 = 3, 1, 8 var3 = 8, 10, 4, 0, 9, 1 I sent the arguments to R, with this line: '/usr/bin/R --vanilla --slave --args '.$var1.' '.$var2.' '.$var3.' < script.r' In my "script.r" I can read the arguments whit this line: args=(commandArgs(TRUE)) args=as.numeric(args) args = 1, 2, 3, 5, 6, 3, 1, 8, 8, 10, 4, 0, 9, 1 I'm looking the way to catch into de R, just the arguments var2 something like args = 3, 1, 8 I know that is possible index with args[6:8] But, the problem is that the length of (var1, var2, var3) might be variable, not always var2 is args[6:8] Thanks in advance, John
Steve Lianoglou
2011-Mar-23 22:47 UTC
[R] How identify args into R, sent from a command line.
On Wed, Mar 23, 2011 at 4:15 PM, Ortiz, John <OrtizJ at si.edu> wrote:> Hi, > > For example, I have several variables in php, like > > var1 = 1, 2, 3, 5, 6 > var2 = 3, 1, 8 > var3 = 8, 10, 4, 0, 9, 1 > > I sent the arguments to R, with this line: > > '/usr/bin/R --vanilla --slave --args ?'.$var1.' '.$var2.' '.$var3.' < script.r' > > In my "script.r" I can read the arguments whit this line: > > args=(commandArgs(TRUE)) > args=as.numeric(args) > > args = 1, 2, 3, 5, 6, 3, 1, 8, 8, 10, 4, 0, 9, 1 > > I'm looking the way to catch into de R, just the arguments var2 > > something like > > args = 3, 1, 8 > > I know that is possible index with > > args[6:8] > > But, the problem is that the length of (var1, var2, var3) might be variable, > not always var2 is args[6:8]Given this exact scenario (variable length var1/2/3), how would you get any language (not just R) to parse this command line call correctly? $ script.r 1 2 3 5 6 3 1 8 8 10 4 0 9 1 Into what you want? While you noodle on that for a bit, you might try another approach, and use command line switches. For instance, what if you invoked your script form the command line like this, instead? $ script.r --arg1=1,2,3,5,6 --arg2=3,1,8 --arg3=8,10,4,0,9,1 Should be easy enough to do from within your php script too, no? If that seems acceptable to you, then take a look at R's optparse library: http://cran.r-project.org/web/packages/optparse/index.html Another approach would be to skip optparse and just call your script slightly differently. Maybe like so: $ script.r "1,2,3,5,6" "3,1,8" "8,10,4,0,9,1" Now after you do your commandArgs(TRUE) maneuver, args[0] (or is it 1?) should have "1,2,3,5,6", which you can split and convert to integers if necessary. HTH, -steve -- Steve Lianoglou Graduate Student: Computational Systems Biology ?| Memorial Sloan-Kettering Cancer Center ?| Weill Medical College of Cornell University Contact Info: http://cbio.mskcc.org/~lianos/contact