我有一个变量向量:
x<-runif(1000,0,1)
我想选择具有最低值的元素:
x[which.min(x)]
默认情况下which.min(x)
,将返回满足此条件的第一个元素,但是,可能会发生多个元素相同低的情况。
有没有办法从这些值中采样并只返回一个?
我有一个变量向量:
x<-runif(1000,0,1)
我想选择具有最低值的元素:
x[which.min(x)]
默认情况下which.min(x)
,将返回满足此条件的第一个元素,但是,可能会发生多个元素相同低的情况。
有没有办法从这些值中采样并只返回一个?
用于which
查找所有等于向量最小值的元素的索引并随机采样一个(除非最小值出现一次 - 然后我们可以返回它)。
# Find indices of minima of vector
ids <- which( x == min(x) )
# If the minimum value appear multiple times pick one index at random otherwise just return its position in the vector
if( length( ids ) > 1 )
ids <- sample( ids , 1 )
# You can use 'ids' to subset as per usual
x[ids]
另一种类似但不使用的if
方法是对匹配的值执行 a 。sample
seq_along
这里有两个例子。x1
有多个最小值。x2
只有一个。
## Make some sample data
set.seed(1)
x1 <- x2 <- sample(100, 1000, replace = TRUE)
x2[x2 == 1][-1] <- 2 ## Make x2 have just one min value
## Identify the minimum values, and extract just one of them.
y <- which(x1 == min(x1))
y[sample(seq_along(y), 1)]
# [1] 721
z <- which(x2 == min(x2))
z[sample(seq_along(z), 1)]
# [1] 463