[Rd] (PR#10534 capture.output(), truncated last output without \n
Philippe Grosjean
phgrosjean at sciviews.org
Sat Dec 29 13:44:04 CET 2007
Thank you, Brian.
Prof Brian Ripley wrote:
> This only happens if 'file' is a text connection, and is the expected
> behaviour in that case: you cannot capture an incomplete line to a text
> connection.
Well, in ?textConnection, Details section, one can read:
"Closing the connection will output the final line, complete or not."
> There seems no reason to break the documented behaviour in other cases
> to change something that you consider to a bug when file=NULL and the
> user does not produce complete output. It would be possible to make use
> of isIncomplete() to add a final newline only where needed to complete a
> line. E.g. use
>
> if(inherits(file, "textConnection") && isIncomplete(file)) cat("\n")
This is fine, except one cannot detect when the last line was complete
or not in capture.output(). I suggest adding an attribute complete =
TRUE/FALSE to the result returned by capture.output(), or any other mean
to return this information.
Best,
Philippe Grosjean
>
> On Sat, 29 Dec 2007, phgrosjean at sciviews.org wrote:
>
>> Full_Name: Philippe Grosjean
>> Version: 2.6.1
>> OS: MacOS X; Windows XP
>> Submission from: (NULL) (81.243.237.235)
>>
>>
>> Last output from capture.output() is truncated if it does not end with a
>> carriage return:
>>
>>> capture.output(cat("text\n")) # Fine
>> [1] "text"
>>> capture.output(cat("text")) # Missing output!
>> character(0)
>>> capture.output({cat("text");1+1}) # Only last output is affected
>> [1] "text[1] 2"
>>
>> Proposed patch: add a carriage return before exiting capture.output():
>>
>> capture.output <-
>> function (..., file = NULL, append = FALSE) {
>>
>>
>> [...]
>>
>> for (item in tmp) if (item$visible)
>> print(item$value)
>> }
>> cat("\n") ### ADD THIS!
>> rval
>> }
>>
>> This changes the behavior of capture.output() a little bit, since it
>> adds "" at
>> the end of regular outputs, but it solves the problem and it allows to
>> detect if
>> last output line was ended by \n, or not.
>>
>> Regards,
>>
>> Philippe Grosjean
>> _
>> platform i386-apple-darwin8.10.1
>> arch i386
>> os darwin8.10.1
>> system i386, darwin8.10.1
>> status
>> major 2
>> minor 6.1
>> year 2007
>> month 11
>> day 26
>> svn rev 43537
>> language R
>>
>> ______________________________________________
>> R-devel at r-project.org mailing list
>> https://stat.ethz.ch/mailman/listinfo/r-devel
>>
>
More information about the R-devel
mailing list