From jh910 at juno.com  Thu Sep  1 15:46:19 2005
From: jh910 at juno.com (J. Hosking)
Date: Thu, 01 Sep 2005 09:46:19 -0400
Subject: [Rd] strwrap
Message-ID: <df70nd$iee$1@sea.gmane.org>

The maximum length of a character string returned by strwrap,
i.e. max(nchar(strwrap(x,width))), never in my experience exceeds
width-2 (unless x contains a word that is longer than this).
This is not exactly a bug -- width is described only as a "target
column for wrapping lines" -- but seems odd.

Though I don't understand everything that the code is doing,
I think that the first line in the "while" block,

   k <- max(sum(lens < maxLength), 1)

should be replaced by

   k <- max(sum(lens <= maxLength + 1), 1)

-- here lens[i] is the number of characters in the string
that consists of the first i words *with a trailing space*,
so there is no need to split unless this number exceeds
the target width plus one.

A code snippet for testing:

    x <- paste(sapply(sample(10, 100, rep=T),
      function(x) substring("aaaaaaaaaa", 1, x)), collapse=" ")
    sapply(10:40, function(m) c(requested.width=m,
      actual.width=max(nchar(strwrap(x, m)))))

Tested on:

   > R.version
          _
   platform i386-pc-mingw32
   arch     i386
   os       mingw32
   system   i386, mingw32
   status   Under development (unstable)
   major    2
   minor    2.0
   year     2005
   month    08
   day      29
   svn rev  35457
   language R



J. R. M. Hosking



[Rd] strwrap
J. Hosking