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 > [EMAIL PROTECTED] > (801) 408-8111 > > > >> -----Original Message----- >> From: [EMAIL PROTECTED] >> [mailto:[EMAIL PROTECTED] On Behalf Of Toby Marthews Sent: Wednesday, June 11, 2008 6:52 AM >> To: r-help@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 [EMAIL PROTECTED] 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? ______________________________________________ R-help@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.