简化功能代码的一部分

时间:2017-04-25 18:57:36

标签: r

我有一个非常简单的问题,假设我有从所选范围生成随机整数的函数,而不会产生零。它是这样的:

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)
}

这可能吗?或者值得花费太多的解决方法?关键是我将有几个函数,每个函数都有一定的限制,所以我认为将它们简化为一个单词会更方便。

2 个答案:

答案 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,并在设置为非零值后停止执行。