2012-06-18 80 views
-3

我有一個函數使用readline來請求用戶輸入數據。但是我很遺憾要確保輸入的數據符合我的標準。我計算「如果」陳述可能是檢查錯誤的最佳方式,但我不確定如何合併它們。我嘗試使用它們顯然是有缺陷的(見下文)。檢查輸入值時出錯

作爲一個簡單的例子,我將遇到的兩個最可能的問題是我想確保至少爲x輸入一些值(並且如果爲x輸入值是一個數字),V1和V2包含相同數量的值。

fun<-function(){ 
T<-readline("What is x") 

if(T=="" | typeof(x)!=numeric) 
{print("Input non-aceptable") 
T<-readline("What is x ")} 

else 

V<-readline("Enter 4 values") 
V2<-readline("Enter 4 more values ") 

if(length(V1)!=length(V2)) 
{print("V1 & V2 do not contain equal # of values") 
    V<-readline("Enter 4 values ") 
    V<-readline("Enter 4 more values ")} 

else 

T<-as.numeric(T) 
V<-as.numeric(V) 
V2<-as.numeric(V2) 
return(list(x,V1,V2) 

}

正如你所看到的,我的希望是嘗試和發現潛在的錯誤,它們會導致發生實際的錯誤之前,然後給該人有機會重新輸入數據。如果「if」語句是要走的路,我可以得到一些正確使用的幫助嗎?

謝謝!

回答

1

在R中,布爾類型TRUEFALSE也可以由TF表示。所以首先嚐試改變你已經命名爲T的變量,以便明智地...例如x也許???其次,在你的typeof(x)參數中,你調用了變量T,這樣就行不通了。另外,數字周圍沒有引號。嘗試if(!(is.numeric(x)))

第三,您的變量名稱不一致,V和V,然後是V1和V2。除了難以閱讀,它也不會工作。

最後,你的return語句需要第二個右括號,功能代碼塊需要一個大括號。