Skip to content

For is.numeric condition in user input

10 messages · Ista Zahn, Smart Guy, Bansal, Vikas +1 more

#
Dear all,

I am using the following function so that user can input a numerical value.

readnumber<- function() 
 {
for(j in 1:10){
 value=readline("enter the threshold for number of reads: ")
 if(is.numeric(value)==T)
{return(value)
break}
else
print("wrong number Please enter numerical value ")} 
 
 }

But if by chance user tries to put character it will show the message-
 wrong number Please enter numerical value

now when I am calling this function and entering numerical value,then also it is showing the message-wrong number Please enter numerical value

Can you please tell me what mistake I am doing?







Thanking you,
Warm Regards
Vikas Bansal
Msc Bioinformatics
Kings College London
#
readline always returns a character. See ?readline for details.

Best,
Ista
On Sun, Jul 24, 2011 at 10:59 PM, Bansal, Vikas <vikas.bansal at kcl.ac.uk> wrote:

  
    
#
Thanks for your reply.I know readline will give me a character.But if I will do something like this-
if i will change value as numeric and if now user will input a character like a or b rather than a number like 4 or 5 or 6,then my code is not showing message-
wrong number Please enter numerical value

That is why I am confused now-I have tried with- value=as.numeric(value)
and without this also.But did not find any solution.


Thanking you,
Warm Regards
Vikas Bansal
Msc Bioinformatics
Kings College London
#
If you run a simple test (that is what is nice about R being
interpreted), you will see that 'as.numeric' is TRUE; what you want to
test for is 'ia.na':
[1] "12as"
[1] NA
Warning message:
NAs introduced by coercion
[1] TRUE
Warning message:
NAs introduced by coercion
On Mon, Jul 25, 2011 at 7:49 AM, Bansal, Vikas <vikas.bansal at kcl.ac.uk> wrote:

  
    
#
Thanks for your reply.But I have never seen ia.na in R.Can you please tell me how to use this?
So you are saying rather than is.numeric,I have to test user input by ia.na?


Thanking you,
Warm Regards
Vikas Bansal
Msc Bioinformatics
Kings College London
#
Typo on my part; should be 'is.na':

so you would do:

repeat{
    value <- as.numeric(readline())
    if (!is.na(value)) break
}
On Mon, Jul 25, 2011 at 8:05 AM, Bansal, Vikas <vikas.bansal at kcl.ac.uk> wrote:

  
    
#
I have tried this,and it is working.But the thing is if user will input a character rather than number,in the end it is showing a warning message-

Warning messages:
1: NAs introduced by coercion 

and this is not good for my tool as I do not want to show this warning to the user.



Typo on my part; should be 'is.na':

so you would do:

repeat{
    value <- as.numeric(readline())
    if (!is.na(value)) break
}
On Mon, Jul 25, 2011 at 8:05 AM, Bansal, Vikas <vikas.bansal at kcl.ac.uk> wrote:
--
Jim Holtman
Data Munger Guru

What is the problem that you are trying to solve?
#
?suppressWarnings
On Mon, Jul 25, 2011 at 8:27 AM, Bansal, Vikas <vikas.bansal at kcl.ac.uk> wrote:

  
    
#
You probably want something like this:

mesg <- 'input: '
repeat{
   value <- suppressWarnings(as.numeric(readline(mesg)))
   if (!is.na(value)) break
   mesg <- "try again: "
}
On Mon, Jul 25, 2011 at 8:27 AM, Bansal, Vikas <vikas.bansal at kcl.ac.uk> wrote: