2011-05-10 605 views
0
n<-NULL 
acr<-NULL 
while((is.numeric(n)==F) & (acr<0 ¦acr>1)){ 
    print("enter a positive integer and the average cancellation rate you want") 
    try(n<-scan(what=integer(),nmax=1), silent=TRUE); 
    try(acr<-scan(what=double(),nmax=1), silent=TRUE) 
} 

我希望我的程序的用戶輸入,我存儲在「N」,我保持一個正整數,第二 條目「ACR」是其概率介於0和1之間。 (我不希望它是0或1,儘管它可能是根據概率論)。 所以我希望用戶繼續進行輸入,直到他們能夠輸入「n」的正整數和「acr」的0到1之間的概率值(與AND,OR運算符一起使用)使用while循環使用邏輯運算符(AND和OR)

但是,我遇到了while語句/循環的問題。我嘗試了所有其他的可能性,例如下面的可能性,但它仍然不起作用。

while(is.numeric(n)==F & acr<0 ¦acr>1) 

AGAIN:問題2 沒有與what=double()也在scan功能的問題,我想。我知道,例如,0.5是其他編程語言中的雙數據類型,但是 我無法在R中找到它(我不知道它在R中稱爲什麼)。 R中的integer()double()之間的區別是什麼? (我不熟悉雙倍)

我會高度讚賞任何人可以來我的援助。

非常感謝大家。

Isaac Owusu

+0

@Owusu艾薩克:嘗試在(is.numeric(N)== F&(ACR <0 ¦acr> 1))。您的原始代碼首先會評估is.numeric(n)== F&acr <0而不是(我相信您的意圖是)is.numeric(n)== F&(acr <0 ¦acr> 1)。 – Jubbles 2011-05-10 14:25:49

回答

1

下面這個例子應該可以工作。請注意,is.integer()

「在不測試,如果‘X’包含 整數!對於這一點,使用 ‘圓’,在函數 ‘is.wholenumber(X)’示例「 (參見help(is.integer))。

因此,我首先定義一個新函數is.wholenumber()

is.wholenumber <- function(x, tol = .Machine$double.eps^0.5){ 
    abs(x - round(x)) < tol 
} 

n <- NULL 
acr <- NULL 
stay.in.loop <- TRUE 

while(stay.in.loop){ 
    print("Please insert n and acr!") 
    n <- readline("Insert n: ") 
    acr <- readline("Insert acr: ") 
    n <- as.numeric(n)  
    acr <- as.numeric(acr) 
    ## stay.in.loop is true IF any of the expressions is NOT TRUE 
    stay.in.loop <- !(is.wholenumber(n) & ((0 < acr) & (acr < 1))) 
} 
+0

適用於readline。請注意這一事實,儘管當輸入爲空時(按下Enter鍵)或輸入文本時會出現警告時會出現錯誤。 – 2011-05-12 14:47:56

+0

@Joris Meys:我同意這是一個非常基本的解決方案,它不會檢查用戶的輸入。 – 2011-05-12 15:13:29

0

NULL在這裏可能是一個糟糕的初始化,因爲它的比較沒有給出一個普通的布爾值。由於條件是n應是積極的,試試這個:

n <- -2 
acr <- -2 
while((n<=0) | (acr<0) | (acr>1)) { 
    print("enter a positive integer and the average cancellation rate you want") 
    try(n<-scan(what=integer(),nmax=1), silent=TRUE); 
    try(acr<-scan(what=double(),nmax=1), silent=TRUE); 
} 
+0

滿足兩個條件時while循環不停止。 – 2011-05-10 15:49:50

+0

嘗試應確保它是一個整數。當輸入正確時,我會糾正情況停止。我們需要檢查n爲負數以繼續循環。 – highBandWidth 2011-05-10 15:54:47

+0

對不起,你是對的。我剛剛糾正了我的評論:-) – 2011-05-10 15:57:02