Skip to content

Can I use a variable to pass a file name to scan() ?

3 messages · Andrew Peterson, Spencer Graves, Uwe Ligges

#
Hi, can anyone please tell me if it is possible to use
a variable to pass a file name to scan()?

I am trying to write a program that loops through a
series of text files. I use list.files() to create a
character vector of file names. Then I would like to
take  one string at a time from the character vector
and use that string to specify the name of the text
file I want to open using scan().

I have used constructs such as

x <- list.files()

y <- scan(file = x[1])

but I always get the following error message:

Error in scan(file = x[1]) : "scan" expected a real,
got "<CLOSE>"

I've read all the documentation at least a couple of
times and have searched this list to no avail. Any
help would be greatly appreciated!

Thanks,

Andrew.
#
What operating system and which version of R? 

      I got a similar error message under R 2.0.1 under Windows 2000: 

 > y <- scan(file = x[1])
Error in scan(file = x[1]) : "scan" expected a real, got "?????"

      Part of the function definition for "scan" is 'scan(file = "", 
what = double(0), ...'.  This means that by default, "scan" was 
expecting double precision numbers.  When it found an unrecognizable 
binary, it complained.  Using 'what="raw"' produced something: 

 > y <- scan(file = x[1], what="raw")
Read 1 items

      The file x[1] was an MS Word *.wbk file, and scan was only able to 
read a portion of the header using "raw". 

      Have you considered "try"? 

 > y <- try(scan(file=x[1]))
Error in scan(file = x[1]) : "scan" expected a real, got "?????"
 > y
[1] "Error in scan(file = x[1]) : \"scan\" expected a real, got 
\"??\021??\261\"\n" 
attr(,"class")
[1] "try-error"

       What are you trying to do?  The following worked for me just now? 

 > write(pi, "pi.txt")
 > scan('pi.txt')
Read 1 items
[1] 3.141593
 > all.equal(scan('pi.txt'), pi)
Read 1 items
[1] "Mean relative  difference: 1.102658e-07"

      hope this helps.  spencer graves
Andrew Peterson wrote:

            
#
Andrew Peterson wrote:

            
Yes.
Right, the file named in x[1] is a text file that starts with "<CLOSE>" 
which is not a number (and scan expects a number, by default), hence 
scan complains.

Use
    y <- scan(file = x[1], what="character")
and you will see that it works.

Uwe Ligges