我希望限制参数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的做法。
答案 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