检查R中函数的用户输入值

时间:2015-10-13 13:03:10

标签: r

我在R中遇到函数问题。我想编写一个名为myfunc的函数,例如:

myfunc<-function(X,a=100,b=10){}

X是矩阵mxn,a,b是a<=mb<=n

的数字

我想在我的函数中添加条件,如果用户没有输入任何内容,a和b将自动分配给100和10。

否则,检查并确保要求用户重复输入a和b,直到它们满足a<=mb<=n

你能帮助我吗?我正在学习R中的功能。提前谢谢

3 个答案:

答案 0 :(得分:1)

通常你会抛出一个错误:

.controller('myController', ['UserDataService', function($scope) {
    $scope.userService = UserDataService;
}

你要求重新输入的想法不是好的做法。

答案 1 :(得分:0)

例如,如果您使用http://www.r-bloggers.com/user-input-using-tcltk/进行用户输入

您可以编写类似

的内容
h=0
while(h==0){
  d1=unlist(varEntryDialog(vars= c('a','b'), labels=c('a:','b:'), fun= c(as.numeric,as.numeric )))
  if(!is.na(d1[[1]])&!is.na(d1[[2]])){
    if(is.numeric(d1[[1]])&d1[[1]]<=m&is.numeric(d1[[2]])&&d1[[2]]<=n) {
      h=1} else { 
        tkmessageBox(title = "Error",message = "bad a and b", icon = "error", type = "ok")}
  }else{
    tkmessageBox(title = "Error",message = "need a and b", icon = "error", type = "ok")}
}
rm(h)

但是真的需要更多解释来提问。

答案 2 :(得分:0)

还可以尝试捕获所有错误并将其返回到单个错误消息中。

myfunc <- function(X, a=100, b=10){
  require(ArgumentCheck)
  Check <- newArgCheck()
  if (a > nrow(X))
    addError("a can't be greater than number of matrix rows",
             Check)
  if (b > ncol(X))
    addError("b can't be greater than number of matrix columns",
             Check)
  finishArgCheck(Check)

 return("Success!")
}

myfunc(mtcars, a = 100, b = 30)

Error: 
myfunc(mtcars, a = 100, b = 30)
1: a can't be greater than number of matrix rows
2: b can't be greater than number of matrix columns