On 05/11/2008 5:47 PM, Peter Ruckdeschel wrote:
Hi r-devels,I am a bit puzzled by the behaviour of cat() --- any help is appreciated... At least AFAICS, cat() for vector-valued '...' argument behaves in contradiction to what I understand from the note in the help to cat() which reads " Despite its name and earlier documentation, 'sep' is a vector of terminators rather than separators, being output after every vector element (including the last). Entries are recycled as needed. "
I think you're right that the documentation is incorrect. I'd prefer a patch to the docs, rather than a change to the behaviour: cat() is so fundamental that any changes to it would have wide ranging consequences.
If you want to study the code and draft a documentation patch, I'll review it and possibly commit it.
Duncan Murdoch
---------------------------------------------------------------------------- reproducible example code: ----------------------------------------------------------------------------cat(rep("x",3), sep = ".")x.x.x ## no "." appended! Things get even worse if "\n" features in the 'sep' vector:cat(rep("x",3),sep = c(".","\n","."))x.x x ## last separator "." gets swallowed; an non-intended line feed is inserted ---------------------------------------------------------------------------- code causing this behaviour ---------------------------------------------------------------------------- ##### "\n" I have looked a bit into the source code (lines 468-630 in builtin.c in src/main) and found out, as variable pwidth is set to 1 in line 504, i.e.; if (strstr(CHAR(STRING_ELT(sepr, i)), "\n")) nlsep = 1; /* ASCII */ the code in lines 622-23, i.e.;if ((pwidth != INT_MAX) || nlsep)Rprintf("\n"); is responsible for the newline. Is this really intended? ##### separators, not terminators Another look shows that, contrary to what is said in the help file, an element of vector 'sep' is /not/ printed out after each element of the vector passed as argument '...' to cat(), "including the last" --- confer the for-loop over the elements of '...' in lines 596-617 and the print-out of the separator cat_printsep(sepr, ntot); in line 600. Once again: Is this intended? A patch fixing my problem would be easy, though might crash other much more important code; would you have any proposals? Best, Peter ------------------------------------------------------------------- Version: platform = i386-pc-mingw32 arch = i386 os = mingw32 system = i386, mingw32 status = Under development (unstable) major = 2 minor = 9.0 year = 2008 month = 10 day = 01 svn rev = 46589 language = R version.string = R version 2.9.0 Under development (unstable) (2008-10-01 r46589) Windows XP (build 2600) Service Pack 3 Locale: LC_COLLATE=German_Germany.1252;LC_CTYPE=German_Germany.1252;LC_MONETARY=German_Germany.1252;LC_NUMERIC=C;LC_TIME=German_Germany.1252 Search Path: .GlobalEnv, package:stats, package:graphics, package:grDevices, package:utils, package:datasets, package:methods, Autoloads, package:base ______________________________________________ [email protected] mailing list https://stat.ethz.ch/mailman/listinfo/r-devel
______________________________________________ [email protected] mailing list https://stat.ethz.ch/mailman/listinfo/r-devel
