[R] Problems with scan

Peter Dalgaard p.dalgaard at biostat.ku.dk
Tue Nov 4 22:36:11 CET 2008


David C. Howell wrote:
> I have been having problems with using scan(). I searched the archives 
> and found someone with the same problem several years ago, but did not 
> find a solution.
> 
> I want to prompt the user for input, scan in that input, and then go on 
> to use it as a variable.
> 
> The simplest version of my program is
> 
> cat("enter m","\n")
> m <- scan(n = 1, quiet = T)
> m
> 
> If I enter these lines one at a time, they work perfectly and I get the 
> following output, which is just want I want..
>  > cat("enter m","\n")
> enter m
>  > m <- scan(n = 1, quiet = T)
> 1: 24
>  > m
> [1] 24
>  >
> 
> However if I submit the three lines together, as you would when running 
> a program, I get
> 
>  > cat("enter m","\n")
> enter m
>  > m <- scan(n = 1, quiet = T)
> 1: m
> 1:
> Error in scan(file, what, nmax, sep, dec, quote, skip, nlines, 
> na.strings,  :
>  scan() expected 'a real', got 'm'
>  >
> 
> In this case the program is reading the line after the scan function as 
> the input to scan, rather than pausing for my entry. The help archives 
> suggested putting this as a function "e.g., getn()" but that gives the 
> same result.
> 
> The scan help file doesn't address this and the help archives don't give 
> me what I need. How do I cause the program to wait for keyboard entry 
> from me?

It _is_ waiting for a keyboard entry. It is just that you are sending it 
an "m"...

If you read both R expressions and data from the same input stream, you 
have to be careful to get them in the right order. If you want to read 
multiple expressions before executing any of them, you can use various 
devices:

A: put them on the same line

 > m <- scan() ; m
1: 1 2 3
4:
Read 3 items
[1] 1 2 3

B: use a compund expression
 > {
+ m <- scan()
+ m
+ }
1: 4 5 6
4:
Read 3 items
[1] 4 5 6

C: use a function
 > f <- function(){
+  m <- scan()
+  m
+ }
 > f()
1: 7 8 9
4:
Read 3 items
[1] 7 8 9

D: Source code from a file
 > source("foo.R")
1: 1 2 4
4: 3 7 9
7:
Read 6 items
[1] 1 2 4 3 7 9
 > cat(readLines("foo.R"), sep="\n")
  m <- scan()
  print(m)


> I am running version 2.8 on a Windows machine, but the problem goes back 
> to much earlier versions.
> 
> While I'm asking, is there a way to suppress the echoing of lines? I 
> would like to omit the lines above that begin with ">". I cannot find 
> "echo" using help.search and can't think of another name to search under.
> 
> Thanks,
> 
> Dave Howell
> 


-- 
    O__  ---- Peter Dalgaard             Øster Farimagsgade 5, Entr.B
   c/ /'_ --- Dept. of Biostatistics     PO Box 2099, 1014 Cph. K
  (*) \(*) -- University of Copenhagen   Denmark      Ph:  (+45) 35327918
~~~~~~~~~~ - (p.dalgaard at biostat.ku.dk)              FAX: (+45) 35327907



More information about the R-help mailing list