2016-05-04 29 views
2

我正在嘗試創建一個獲取少量輸入的函數。我想知道如何檢查我的論點的可用性。這裏是我的功能:檢查每個參數是否存在作爲函數中的輸入

MyFunction<-function(data,window,dim,option) { 

} 

首先,我想看看是否有任何說法,如果沒有,打印錯誤 是正確使用

if ~nargin 
    error('no input data') 
    } 

然後,我要確保那第二個參數也插入
是不是要問這樣

if nargin < 2 
    error('no window size specified') 
    } 

然後,我要檢查,如果第三個參數是空,將其設置爲1

if nargin < 3 || isempty(dim) 
    dim<-1 
    } 
+2

退房'?missing'(和第三個參數,設定的默認值'暗淡= 1'在函數定義) –

回答

3

可以使用hasArg()

testfunction <- function(x,y){ 
    if(!hasArg(x)){ 
    stop("missing x") 
    } 
    if(!hasArg(y)){ 
    y = 3 
    } 
    return(x+y) 
} 

>testfunction(y=2) 
Error in testfunction(y = 2) : missing x 

> testfunction(x=1,y=2) 
[1] 3 

> testfunction(x=1) 
[1] 4 
+0

你可以擴展你的答案到更少的東西,我在上面添加了更多的東西,如果你可以在你的答案中添加這些東西,那將是非常棒的。 – nik

+0

你應該能夠使用我已經擁有的例子來滿足你的需要,hasArg只是一個真假。無論您想在其周圍設置什麼邏輯,都可以提供邏輯運算'&'和'|'。如果你正在努力實現這一點,你可以展示一些更新的嘗試。 – zacdav

1

正如@Ben Bolker所述,缺少用於測試一個值是否被指定爲參數的函數。您的R功能可能有不同的條件,例如警告或停止。 在你的情況,我會做以下

MyFunction<-function(data,window,dim,option) { 
if (missing(data)) 
     stop("the first argument called data is missing") 
if (missing(window)) 
     stop("the second argument called window is missing") 
if (missing(dim)) 
     dim <- 1 
if (missing(option)) 
     stop("the second argument called option is missing") 
}