2014-09-28 26 views
4

如果我的函數在R中輸入了(x,y,z),我想寫一行代碼來確保x的數據是正確的。在R中的用戶定義函數中,我如何檢查輸入在R中的格式是否正確?

x只是一個實數,而不是其他任何東西,比如向量或列表。我假設的代碼會去像

if (...){stop("x must be a real number")} 

我想知道的支架,而不是...內發生的事情?

原因是,如果我在向量中寫入,程序只是將向量的第一個分量作爲輸入。 R會對此發出警告,但我希望該程序立即停止。

回答

8

如果你想 「停止」,如果你的變量是長度爲1,和實數

你可以使用stopifnot

foo <- function(x, y, z) { 
    stopifnot(length(x)==1L & is.numeric(x)) 
} 

或許

foo <- function(x, y, z){ 
    if(!(length(x)==1L & is.numeric(x))) { stop("x must be a real number")} 
} 

stop讓你指定錯誤消息,而stopifnot將返回經過測試的條件。 (兩者都有優點)

stopifnot的好處是,它可以告訴你到底是哪的多個條件failed.for例子(注意,我現在喂多個表達式)

foo <- function(x, y, z) { 
     stopifnot(length(x)==1L , is.numeric(x)) 
    } 

foo('a') 
# Error: is.numeric(x) is not TRUE 
foo(c(1,2)) 
# Error: length(x) == 1L is not TRUE 
相關問題