[R] How can I stop strwrap removing escape characters? (and solution to the screen wrapping question from 11/6)

Toby Marthews Toby.Marthews at lsce.ipsl.fr
Mon Jun 16 11:33:10 CEST 2008


After the helpful reply from Greg Snow (below), I've written a function
printtoscreen which does the screen wrapping I need (although not in a
very elegant way). This works fine for strings without any escape
characters in them, e.g.

> printtoscreen=function(str) {
+ str2=strwrap(str,width=getOption("width"))
+ if (length(str2)>1)
{str2[2:length(str2)]=paste("\b\b",str2[2:length(str2)],sep="")} #to
remove the ", "s toString puts in
+ str2=paste(str2,"\n",sep="")
+ cat(str2)
+ }
> getOption("width")
[1] 59

> cat("Measured lengths are (",toString(1:20/100),") mm.\n")
Measured lengths are ( 0.01, 0.02, 0.03, 0.04, 0.05, 0.06,$

> printtoscreen(paste("Measured lengths are (",toString(1:20/100),")
mm.\n",sep=""))
Measured lengths are (0.01, 0.02, 0.03, 0.04, 0.05, 0.06,
0.07, 0.08, 0.09, 0.1, 0.11, 0.12, 0.13, 0.14, 0.15, 0.16,
0.17, 0.18, 0.19, 0.2) mm.
>

HOWEVER, if you use any escape characters in your string, it fails because
strwrap removes all of them:

>
> cat("\n\tHello.\n")

        Hello.
> printtoscreen("\n\tHello.\n")
Hello.
>

Is there any way to prevent strwrap doing this? I haven't found any
options for this.

Thanks very much (and thanks to Greg Snow for the tip about strwrap before).

Toby Marthews


==============================================
Le Mer 11 juin 2008 18:00, Greg Snow a écrit :
> You could try passing your character string to the strwrap function
first,
> then use cat on the result.
>
> --
> Gregory (Greg) L. Snow Ph.D.
> Statistical Data Center
> Intermountain Healthcare
> greg.snow at imail.org
> (801) 408-8111
>
>
>
>> -----Original Message-----
>> From: r-help-bounces at r-project.org
>> [mailto:r-help-bounces at r-project.org] On Behalf Of Toby Marthews Sent:
Wednesday, June 11, 2008 6:52 AM
>> To: r-help at r-project.org
>> Subject: [R] Word wrapping for character objects (WINDOWS R ONLY) Can
anybody help me with this problem? ** ONLY WINDOWS R - PROBLEM
DOESN'T OCCUR ON LINUX **
>> I want to print a long character to screen:
>> > getOption("width")
>> [1] 60
>> > z=(1:20)/10    #z is a vector of length between 20 and 30 (depending
on user options) containing lengths in mm (i.e. each element is 1-5
characters long)
>> > str1=paste("The depths chosen are (",toString(z),") mm, and more text
...\n")
>> > cat(str1)
>> The depths chosen are ( 0.1, 0.2, 0.3, 0.4, 0.5, 0.6, 0.7, 0.8, 0.9, 1,
1.1, 1.2, 1.3, 1.$
>> >
>> The problem is that on R for Windows the string is cropped by the
window size (hence the "$"). On R for Linux, this doesn't happen and the
text is "word wrapped" (the default for the shell, I guess):
>> > cat(str1)
>> The depths chosen are ( 0.1, 0.2, 0.3, 0.4, 0.5, 0.6, 0.7, 0.8, 0.9, 1,
1.1, 1.2, 1.3,
>> 1.4, 1.5, 1.6, 1.7, 1.8, 1.9, 2 ) mm, and more text ...
>> >
>> I can't find any option for "word wrapping" in the cat command
(fill=TRUE has no effect). I also checked the menu Edit -> GUI
preferences..., but there doesn't seem to be a "Word Wrap" option there
either.
>> How do I get word wrapping like this in Windows?
>> THANKS FOR ANY HELP!
>> Toby Marthews
>> Previous relevant posts:
>> - The post from 2006 about Screen Wrapping
(http://tolstoy.newcastle.edu.au/R/help/06/05/26673.html) which Brian
Ripley answered was about controlling how long vectors are cropped to the
screen. Unfortunately, the width option in options() does not
affect character objects, so I can't use that control here.
>> - I sent the same question to r-sig-gui at stat.math.ethz.ch in Oct 2007,
but noone there could help me with it.
>> - Try the following command on Windows R with a small window
(getOption("width")<117) and a large window (getOption("width")>117) and
you'll see you get extra nonexistent options in the menu:
>> a=c("Jan","Feb","Mar","Apr","May","Jun","Jul","Aug","Sep","Oct","Nov","Dec");menu(a)
I guess this is a related problem?



More information about the R-help mailing list