1

我有一个变量向量:

x<-runif(1000,0,1)

我想选择具有最低值的元素:

x[which.min(x)]

默认情况下which.min(x),将返回满足此条件的第一个元素,但是,可能会发生多个元素相同低的情况。

有没有办法从这些值中采样并只返回一个?

4

2 回答 2

3

用于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]
于 2013-10-08T11:08:12.377 回答
2

另一种类似但不使用的if方法是对匹配的值执行 a 。sampleseq_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
于 2013-10-08T11:38:20.433 回答