2014-03-07 116 views
1

我想輸出水果用戶輸入的數量,如果它是< 0或者如果它大於我想讓它打破的數字。不知道爲什麼它不工作?!爲什麼stopifnot不能按預期工作?

how.many<-function(fruit, number){ 
    string<-paste("How many",fruit,"?",sep=" ") 
    #cat(string) 
    #return(scan(string)) 
    fruit_number<-readline(string) 
    stopifnot(fruit_number>number) 
    stopifnot(fruit_number<0) 
    return(fruit_number) 
} 

我應該輸出4當數字是4,但它打破。 > how.many( 「香蕉」,5)

How many banana ?0 
Error: fruit_number > number is not TRUE 
> how.many("banana",5) 
How many banana ?9 
Error: fruit_number < 0 is not TRUE 
> how.many("banana",5) 
How many banana ?4 
Error: fruit_number > number is not TRUE 

回答

2

你的測試被顛倒過來。你需要指定一個TRUE值不停止(因爲它說,stopifnot)。

how.many<-function(fruit, number){ 
    string<-paste("How many",fruit,"?",sep=" ") 
    #cat(string) 
    #return(scan(string)) 
    fruit_number<-readline(string) 
    stopifnot(fruit_number<=number) 
    stopifnot(fruit_number>=0) 
    return(fruit_number) 
} 

> how.many("banana", 5) 
How many banana ?9 
Error: fruit_number <= number is not TRUE 
> how.many("banana", 5) 
How many banana ?4 
[1] "4" 
1

stopifnot實際上意味着什麼,它說: 「停止,如果不是(......)」。並且(4> 5)爲而不是爲真。所以它停止。你想要相反的標誌。

相關問題