[R] reading in results from system(). There must be an easier way...

Henrik Bengtsson hb at stat.berkeley.edu
Thu Sep 18 23:14:17 CEST 2008


On Thu, Sep 18, 2008 at 1:39 PM, Michael A. Gilchrist <mikeg at utk.edu> wrote:
> Wow, that's elegant and simple.  It's also faster than my approach.
>
> NB, you don't need to use close(), read.delim() closes the pipe when its
> done reading.

If read.delim() close the connection in this case, it's a bug.  It
should only close the connection if it opens it.

/Henrik

>
> Thank you all for your suggestions, they really helped me with this problem
> and understand R just a bit better.
>
> Sincerely,
>
> Mike
> -----------------------------------------------------
> Department of Ecology & Evolutionary Biology
> 569 Dabney Hall
> University of Tennessee
> Knoxville, TN 37996-1610
>
> phone:(865) 974-6453
> fax:  (865) 974-6042
>
> web: http://eeb.bio.utk.edu/gilchrist.asp
> -----------------------------------------------------
>
>
> On Fri, 12 Sep 2008, Prof Brian Ripley wrote:
>
>> Why not use
>>
>> con <- pipe(COMMAND)
>> foo <- read.delim(con, colClasses="numeric")
>> close(con)
>>
>> ?  See the 'R Data Input/Output Manual'.
>>
>> On Fri, 12 Sep 2008, Michael A. Gilchrist wrote:
>>
>>> Hello,
>>>
>>> I am currently using R to run an external program and then read the
>>> results the external program sends to the stdout which are tsv data.
>>>
>>> When R reads the results in it converts it to to a list of strings which
>>> I then have to maniuplate with a whole slew of commands (which, figuring out
>>> how to do was a reall challenge for a newbie like myself)--see below.
>>>
>>> Here's the code I'm using.  COMMAND runs the external program.
>>>
>>>   rawInput= system(COMMAND,intern=TRUE);##read in tsv values
>>>   rawInput = strsplit(rawInput, split="\t");##split elements w/in the
>>> list
>>>                                              ##of character strings by
>>> "\t"
>>>   rawInput = unlist(rawInput); ##unlist, making it one long vector
>>>   mode(rawInput)="double"; ##convert from strings to double
>>>   finalInput = data.frame(t(matrix(rawInput, nrow=6))); ##convert
>>>
>>> Because I will be doing this 100,000 of times as part of an optimization
>>> problem, I am interested in learning a more efficient way of doing this
>>> conversion.
>>>
>>> Any suggestions would be appreciated.
>>>
>>>
>>> Thanks in advance.
>>>
>>> Mike
>>>
>>>
>>> -----------------------------------------------------
>>> Department of Ecology & Evolutionary Biology
>>> 569 Dabney Hall
>>> University of Tennessee
>>> Knoxville, TN 37996-1610
>>>
>>> phone:(865) 974-6453
>>> fax:  (865) 974-6042
>>>
>>> web: http://eeb.bio.utk.edu/gilchrist.asp
>>>
>>
>> --
>> Brian D. Ripley,                  ripley at stats.ox.ac.uk
>> Professor of Applied Statistics,  http://www.stats.ox.ac.uk/~ripley/
>> University of Oxford,             Tel:  +44 1865 272861 (self)
>> 1 South Parks Road,                     +44 1865 272866 (PA)
>> Oxford OX1 3TG, UK                Fax:  +44 1865 272595
>>
>
> ______________________________________________
> R-help at r-project.org mailing list
> https://stat.ethz.ch/mailman/listinfo/r-help
> PLEASE do read the posting guide http://www.R-project.org/posting-guide.html
> and provide commented, minimal, self-contained, reproducible code.
>



More information about the R-help mailing list