限制数字范围的参数

时间:2017-10-14 21:44:29

标签: r

我希望限制参数k在R中可以具有的值。我已经看过this示例,其中涉及将值限制为字符,但我对数值感兴趣。

为了进一步解释我正在寻找的内容,k可以在1到10之间,但如果没有指定值,则默认值为3。

我知道我可以做到以下几点:

foo <- function(k = 3) { #check k is in range of 1 and 10 here #if not in range then set it to 3 }

我只是想知道是否有更多R-esque的做法。

2 个答案:

答案 0 :(得分:2)

如果k是整数,请尝试:

if (!(k %in% 1:10)) k = 3

如果k是任何数字,这可能会有所帮助:

k = ifelse(k < 1 | k > 10, 3, k)

为了使这个功能符合你的建议,你可以去:

foo <- function(k = 3) {
    k = ifelse(k < 1 | k > 10, 3, k)
    return(k)
}

答案 1 :(得分:1)

请注意,ifelse函数存在轻微的开销,这可能无关紧要。但是,为了完整性,这个解决方案会做到并且更快

> f1 <- function(k = 3)
+   ifelse(k < 1 | k > 10, 3, k)
> 
> f2 <- function(k = 3){
+   test <- k < 1 | k > 10
+   k * (!test) + 3 * test
+ }
> 
> x <- rnorm(1e5, sd = 10)
> all.equal(f1(x), f2(x))
[1] TRUE
> 
> microbenchmark::microbenchmark(f1(x), f2(x))
Unit: milliseconds
  expr      min       lq      mean    median        uq      max neval
 f1(x) 7.416093 9.543104 13.464866 10.038314 10.823893 80.44003   100
 f2(x) 1.594468 2.060443  3.983543  2.224986  3.647207 71.04627   100