2013-04-11 72 views
4

我已經編寫了代碼,要求用戶鍵入「2012」或「2013」​​。然後,我有一個while循環檢查,以查看用戶是否鍵入2012或2013.如何修復多個條件的while循環返回錯誤

輸入有效年份的請求應該繼續,直到用戶輸入一個有效的號碼。但是,我不斷收到一個意外的「{」發生的錯誤。我找不到爲什麼這會在我的代碼中產生這樣的錯誤。

下面是代碼:

yr_function <-function(){ 
    year_of_data <- as.numeric(readline("Is the year of concern 2012 or 2013? >>> ")) 
} 

year_of_data = 0 
While((year_of_data != 2012) | (year_of_data != 2013)){ 
    yr_function 
if(year_of_data != (2012 | 2013),print("You must type either 2012 or 2013") 
} 

有產生錯誤讀取:

Error: unexpected '{' in "While((year_of_data != 2012) | (year_of_data != 2013)){" 

任何幫助將非常感激。

+0

您的代碼中填充了不正確的R代碼,例如'year_of_data!=(2012 | 2013)'和'if(),print()'。還要計算您的打開和關閉括號。不要聽起來那麼尖銳,但我會建議你閱讀一些R教程,以瞭解正確的R語法是什麼。 – 2013-04-11 20:21:07

+0

這個問題可以幫助別人嗎?我們不是在這裏調試你的代碼。 – agstudy 2013-04-11 20:21:51

+0

我很喜歡幫助調試,但是這個代碼只看起來像R代碼,實際上它不是正確的R代碼。 – 2013-04-11 20:22:52

回答

14

你有這裏的一般想法的骨頭,但你已經在幾個地方被簡單的錯誤絆倒。以下是一個註釋版本,可以按照您的描述進行操作:

yr_function <-function(){ 
    res <- as.numeric(readline("Is the year of concern 2012 or 2013? >>> ")) 
    if (is.na(res)){ 
    res <- -1 
    } 
    res 
} 

您的第一個問題是圍繞範圍展開的。您在此函數中定義了year_of_data,並且在while循環之前。但是函數內部創建的變量不會引用while循環之前的變量。它們存在於不同的環境中。所以我將這個函數修改爲返回用戶輸入的值。

你沒有多少討論驗證,這是一個很大的話題。我在這裏添加了一點驗證。基本上,如果用戶輸入的東西不能合理地強制爲數字,那麼你會得到一個NA值,這將是頭痛的道路。所以我簡單地檢查一下並在那種情況下返回-1。這是而不是驗證問題的完整解決方案。

year_of_data <- 0 
while((year_of_data != 2012) & (year_of_data != 2013)){ 
    year_of_data <- yr_function() 
    if (!year_of_data %in% c(2012,2013)){ 
     print("You must type either 2012 or 2013") 
    }else{ 
     break 
    } 
} 

這裏是固定的while循環。首先,我修復了一些簡單的語法錯誤(它是while而不是While等)。然後我將yr_function()的結果分配到year_of_data,以便我們可以檢查結果值並相應地採取行動。

您在if條件下的嘗試(year_of_data != (2012 | 2013))在語法上不正確,因此我切換到檢查值是否包含在向量c(2012,2013)中。

最後,你用一個逗號和一個打印語句跟着if。逗號是另一個語法錯誤。所以我在print聲明中添加了大括號,並添加了else子句,如果用戶輸入了正確的內容,就會跳出while循環。

更一般地,您可能想要調查功能menu這類任務。它可能會使驗證問題更簡單一些。

+1

+1精心製作的答案,並花時間幫助某人。 – 2013-04-12 05:10:10

+0

謝謝喬蘭。我非常感謝你這樣做。這是非常有幫助的,並幫助我看看這條路。 – 2013-04-13 01:59:43