Skip to content

possible bug in 'scan'

5 messages · Benjamin Tyner, Greg Snow, Dan Davison +1 more

#
R-devel,

When I run the following code on the attached file,

tmp <- scan("C:/temp.csv",
            what=list("character","numeric"),
            sep=",")

Then tmp[[2]] is a character vector. My impression from the help file
is that it should be a numeric as specified by 'what'
R version 2.5.0 (2007-04-23)
i386-pc-mingw32

locale:
LC_COLLATE=English_United States.1252;LC_CTYPE=English_United
States.1252;LC_MONETARY=English_United
States.1252;LC_NUMERIC=C;LC_TIME=English_United States.1252

attached base packages:
[1] "stats"     "graphics"  "grDevices" "utils"     "datasets"
"methods"   "base"

other attached packages:
 lattice    gdata
"0.15-5"  "2.3.1"

My apologies if this is due to my misunderstanding.
Ben
#
The what argument looks at what the elements are, not the word they say.
Try this:
Hope this helps,
#
How embarrassing -- works like a charm.
On 6/26/07, Greg Snow <Greg.Snow at intermountainmail.org> wrote:
#
Hi Ben,
On Tue, Jun 26, 2007 at 11:58:35AM -0400, Benjamin Tyner wrote:
?scan says

[...]
 what: the type of 'what' gives the type of data to be read.
[...]

so for example

what=list(character(), numeric())

would presumably have worked, but not your code, as both of your list elements are of type character.

Dan

        
#
On Tue, 26 Jun 2007, Benjamin Tyner wrote:

            
No, as "numeric" is a character vector.

     what: the type of 'what' gives the type of data to be read. The
           supported types are 'logical', 'integer', 'numeric',
           'complex', 'character', 'raw' and 'list'. If 'what' is a
           list, it is assumed that the lines of the data file are
           records each containing 'length(what)' items ("fields") and
           the list components should have elements which are one of the
           first six types listed or 'NULL', see section 'Details'
           below.

so you need what = list("", 0), say.

There are even examples in 'An Introduction to R'.