[R] write output in a custom format

baptiste Auguié ba208 at exeter.ac.uk
Fri Feb 15 13:57:54 CET 2008


Fair point! I guess I'll see how long it takes with a pure R  
solution, and maybe then try some optimization if needed.


Thanks again,

baptiste


On 14 Feb 2008, at 21:27, jim holtman wrote:

> There is nothing wrong with a loop for handling this case.  Most of
> your time is probably going to be spent writing out the files.  If you
> don't want 'for' loops, you can use 'lapply', but I am not sure what
> type of "performance" improvement you will see.  You are having to
> make decisions on each particle on how to write it. You can also use
> awk/perl as you indicated, but you would have to write the data out
> for those programs.  You might take a test run and see.  I would guess
> that by the time you format it for awk and then run awk, you could
> have done the whole thing in R.  But it is your choice and there are
> plenty of tools to choose from.
>
> On 2/14/08, baptiste Auguié <ba208 at exeter.ac.uk> wrote:
>> Thanks for the input! It does work fine, however I'll have to do
>> another loop to repeat this whole process quite a few times (10^3,
>> 10^4 particles maybe), so I was hoping for a solution without loop.
>> Maybe I could reshape all the values into a big array, dump it to a
>> file and replace some values using system(awk...). I just don't
>> really know how to format the data, having different number of values
>> for some lines. Would that be a sensible thing to do?
>>
>> thanks,
>>
>> baptiste
>>
>>
>>
>>
>> On 14 Feb 2008, at 16:49, jim holtman wrote:
>>
>>> Here is a start.  You basically have to interate through your  
>>> data and
>>> use 'cat' to write it out:
>>>
>>> particle <- list(dose=c(1,100.0,0),pos=data.frame(x=c(0,1,0,1),y=c
>>> (0,1,0,1)))
>>> output <- file("/tempxx.txt", "w")
>>> cat(particle$dose, "\n", file=output, sep=" ")
>>> for (i in 1:nrow(particle$pos)){
>>>     cat(particle$pos$x[i], particle$pos$y[i], "\n", file=output,
>>> sep=" ")
>>> }
>>> cat("#\n", file=output, sep=" ")
>>> close(output)
>>>
>>> Here is what the file looks like:
>>>
>>> 1 100 0
>>> 0 0
>>> 1 1
>>> 0 0
>>> 1 1
>>> #
>>>
>>>
>>> On 2/14/08, baptiste Auguié <ba208 at exeter.ac.uk> wrote:
>>>> Hi,
>>>>
>>>>
>>>> I need to create a text file in the following format,
>>>>
>>>>> 1 100.0 0
>>>>>  0 0
>>>>>  1 1
>>>>>  0 0
>>>>>  1 1
>>>>> #
>>>>> 1 100.0 0
>>>>>  0 0
>>>>>  0 1
>>>>>  1 0
>>>>>  1 1
>>>> ...
>>>>
>>>> where # is part of the format and not a R comment.
>>>>
>>>> Each block (delimited by #) consists of a first line with three
>>>> values, call it dose, and a list of (x,y) coordinates which are a
>>>> matrix or data.frame,
>>>>
>>>>
>>>>> particle <- list(dose=c(1,100.0,0),pos=data.frame(x=c(0,1,0,1),y=c
>>>>> (0,1,0,1)))
>>>>>
>>>>> print(particle)
>>>>
>>>>
>>>>
>>>> I'd like to establish a connection to a file and append to it a
>>>> "particle" block in the format above, or even write the whole  
>>>> file at
>>>> once.
>>>>
>>>> Because different lines have a different number of elements, I
>>>> couldn't get write.table to work in this case, and my attempts at
>>>> sink
>>>> (), dump(), writeLines(), writeChar() all turn into really dirty
>>>> solutions. I have this feeling I'm overlooking a simple solution.
>>>>
>>>> Any help welcome,
>>>>
>>>>
>>>> baptiste
>>>>
>>>> _____________________________
>>>>
>>>> Baptiste Auguié
>>>>
>>>> Physics Department
>>>> University of Exeter
>>>> Stocker Road,
>>>> Exeter, Devon,
>>>> EX4 4QL, UK
>>>>
>>>> Phone: +44 1392 264187
>>>>
>>>> http://newton.ex.ac.uk/research/emag
>>>> http://projects.ex.ac.uk/atto
>>>>
>>>> ______________________________________________
>>>> 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.
>>>>
>>>
>>>
>>> --
>>> Jim Holtman
>>> Cincinnati, OH
>>> +1 513 646 9390
>>>
>>> What is the problem you are trying to solve?
>>
>> _____________________________
>>
>> Baptiste Auguié
>>
>> Physics Department
>> University of Exeter
>> Stocker Road,
>> Exeter, Devon,
>> EX4 4QL, UK
>>
>> Phone: +44 1392 264187
>>
>> http://newton.ex.ac.uk/research/emag
>> http://projects.ex.ac.uk/atto
>>
>> ______________________________________________
>> 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.
>>
>
>
> -- 
> Jim Holtman
> Cincinnati, OH
> +1 513 646 9390
>
> What is the problem you are trying to solve?

_____________________________

Baptiste Auguié

Physics Department
University of Exeter
Stocker Road,
Exeter, Devon,
EX4 4QL, UK

Phone: +44 1392 264187

http://newton.ex.ac.uk/research/emag
http://projects.ex.ac.uk/atto



More information about the R-help mailing list