我在R中遇到函数问题。我想编写一个名为myfunc的函数,例如:
myfunc<-function(X,a=100,b=10){}
X是矩阵mxn
,a,b是a<=m
和b<=n
我想在我的函数中添加条件,如果用户没有输入任何内容,a和b将自动分配给100和10。
否则,检查并确保要求用户重复输入a和b,直到它们满足a<=m
和b<=n
。
你能帮助我吗?我正在学习R中的功能。提前谢谢
答案 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