Skip to content
Back to formatted view

Raw Message

Message-ID: <20050414130212.GA19868@jtkpc.cmp.uea.ac.uk>
Date: 2005-04-14T13:02:12Z
From: Jan T. Kim
Subject: Printing integers in R "as is"
In-Reply-To: <Pine.GSO.4.33_heb2.09.0504141423010.1958-100000@csd.cs.technion.ac.il>

On Thu, Apr 14, 2005 at 02:32:33PM +0300, Firas Swidan wrote:

> I am using the following command to print to a file (I omitted the file
> details):
> 
> cat( paste( paste(orientation, start, end, names,"\n"), paste(start, end,
> "exon\n"), sep=""))
> 
> where "orientation" and "names" are character vectors and "start" and
> "end" are integer vectors.

For printing formatted output of this kind, you're generally much better
off using sprintf, as in

    cat(sprintf("%2s  %8d  %8d  %s\n", orientation, as.integer(start), as.integer(end), names));

or, if length(names) > 1, you might consider

    sprintf("%2s  %8d  %8d  %s\n", orientation, as.integer(start), as.integer(end), paste(names, collapse = ", "));

etc. This assumes that start and end are numeric vectors of length 1,
which seems sensible to me based on the context I can conclude from the
variable names, and I think that sprintf in R-devel, and R 2.1.0 in the
near future will cycle over longer vectors too.

> The problem is that R coerce the integer vectors to characters. In
> general, that works fine, but when one of the integer is 100000 (or has
> more 0's) then R prints it as 1e+05. This behavior causes a lot of
> trouble for the program reading R's output.
> This problem occur with paste, cat,
> and print (i.e. paste(100000)="1e+05" and so on).

Are you certain that start and end are integer vectors? If in doubt,
check typeof(start) -- the fact that the values are integer does not
necessarily mean that the type is integer.

Best regards, Jan
-- 
 +- Jan T. Kim -------------------------------------------------------+
 |    *NEW*    email: jtk at cmp.uea.ac.uk                               |
 |    *NEW*    WWW:   http://www.cmp.uea.ac.uk/people/jtk             |
 *-----=<  hierarchical systems are for files, not for humans  >=-----*