我有一个非常简单的问题,假设我有从所选范围生成随机整数的函数,而不会产生零。它是这样的:
customfunction=function(minv,maxv){
value=floor(runif(1,min=minv,max=maxv))
repeat {
if (value<0){break}
else if(value>0){break}
else {value=floor(runif(1,min=minv,max=maxv))}
}
print(value)
}
很简单。我想要做的是使限制我的函数的部分从零生成只有一个句子,例如zero_restriction
,在MY HEAD中它看起来像这样:
customfunction=function(minv,maxv){
value=floor(runif(1,min=minv,max=maxv))
zero_restriction
print(value)
}
这可能吗?或者值得花费太多的解决方法?关键是我将有几个函数,每个函数都有一定的限制,所以我认为将它们简化为一个单词会更方便。
答案 0 :(得分:1)
如果您只是使用整数,一种方法是排除您不想要的值(例如0)并使用sample
而不是runif
......
customfunction <- function(minv,maxv){
excl <- c(0) #values to exclude
range <- seq(minv,maxv)
range <- range[-which(range %in% excl)]
return(sample(range,1))
}
答案 1 :(得分:0)
您也可以考虑应用while循环,例如
while((r <- floor(runif(1, min, max))) == 0) { }
print(r)
这可能不是最易读的解决方案,但它会生成新的随机值,因为long r设置为0,并在设置为非零值后停止执行。