2017-08-16 50 views
0

退出我有這樣如何從腳本中的R

Squ <- function(x, expected.result){ 
result <- x*x 
    if(result != expected.result){ 
    stop("We have some error /n/n") 
    return(NULL) 
    } 
    return(result) 
} 

功能我正在下面三行。

Squ(2, 4) 
Squ(3, 7) 
Squ(4, 16) 

理想我預期這個腳本將在第二行,即SQU停止(3,7)彷彿條件是在函數真,但它並沒有停止&完全運行該腳本。如果條件符合條件,如何編寫腳本以停止。

感謝, 瑪尼

+0

你如何執行它?它應該停止,如果你在rStudio中輸入它,例如 – drmariod

+2

你想讓你的函數崩潰解釋器嗎? –

+0

您的功能適用於我。 – count

回答

0

通常情況下,運行v代碼交互意味着你將保持運行的代碼,新的生產線,即使有錯誤。如果您希望代碼在出現任何錯誤時立即停止,您應該將呼叫包裝到Squ中。如果要保存每個測試的值,則必須編輯該函數,但看起來您已經知道每個值應該是什麼,並且您試圖找到第一個錯誤。使用函數會給你第一個錯誤信息,然後停止執行。

test_Squ <- function() { 
    Squ(2, 4) 
    Squ(3, 7) 
    Squ(4, 16) 
    print("All code ran without throwing an error") 
} 

test_Squ() 
# Error in Squ(3, 7) : We have some error /n/n 

讓我知道如果你有一個更具體的用例記住,我會編輯我的答案。

+0

謝謝,我從你的答案中得到了一個想法。 –

+0

同樣的情況下,我在上面的腳本中有十行而不是三行的腳本。有時我會運行全部十條線或特定的選定線。所以那個時候我不能爲這個權利創建功能?如果我運行特定的三個或一些n行腳本將不會停止權利?如何解決這種情況下的問題。 –

+0

你可以在一個函數中放入你想要的許多行。每次你想運行它時重新定義一個函數都沒有錯。 –