我经常处理实数的开放时间间隔,即我想排除边界,自然要避免1/0:1
和这些人。
我通过写这个函数来帮助我,
oInt <- function(x, y, res=1) seq(x, y, res)[!seq(x, y, res) %in% c(x, y)]
x1 <- oInt(0, 1, .001)
> x1[c(1:2, length(x1)-1, length(x1))]
[1] 0.001 0.002 0.998 0.999
> sample(x1, 7, replace = TRUE)
[1] 0.703 0.404 0.698 0.287 0.753 0.679 0.354
但无论定义多小res=
,它都会保持近似值。并且它会以这种方式使用相当多的字节来节省这些东西。
然后我遇到了sets
包裹:
> (x2 <- sets::interval(0, 1, "open"))
(0, 1)
E.g。这不错:
f <- function(x) x*x
curve(f, unlist(x2))
但是,例如这不会:
> sample(unlist(x2), 7, replace=TRUE)
lc rc l rc rc rc l
0 0 0 0 0 0 0
我忽略了(基础)R中的一个简洁的解决方案吗?也许我不是在找正确的地方,也不是用错误的词语搜索,但我什么都没发现。或者我只是再次访问wrong track? 注意:为了匮乏,我排除了其他案例,例如:半开的间隔,但当然我也在处理那些。