在R列表中选择随机元素?

时间:2012-02-22 07:51:36

标签: r

a<-c(1,2,0,7,5)

某些语言有一个选择器功能 - 从a中选择一个随机数 - 在R中如何?

6 个答案:

答案 0 :(得分:73)

# Sample from the vector 'a' 1 element.
sample(a, 1)

答案 1 :(得分:21)

上述答案在技术上是正确的:

sample(a,1)

然而,如果你想多次重复这个过程,让我们说你想模仿掷骰子,然后你需要补充:

a<-c(1,2,3,4,5,6)
sample(a, 12, replace=TRUE)

希望它有所帮助。

答案 2 :(得分:11)

使用样品时要小心!

sample(a, 1)对于示例中的向量非常有用,但是当向量的长度为1时,可能会导致意外行为,它会使用向量1:a进行采样。

因此,如果您尝试从不同长度的矢量中选择一个随机项,请检查长度为1的情况!

sampleWithoutSurprises <- function(x) {
  if (length(x) <= 1) {
    return(x)
  } else {
    return(sample(x,1))
  }
}

答案 3 :(得分:4)

阅读有关在R中生成随机数的this文章。

http://blog.revolutionanalytics.com/2009/02/how-to-choose-a-random-number-in-r.html

在这种情况下,您可以使用sample

sample(a, 1)

第二个属性显示您只想获得一个随机数。 在某个范围runif之间生成数字函数很有用。

答案 4 :(得分:3)

当向量为长度为1时,此方法不会产生错误,并且很简单。

a[sample(1:length(a),1)]

答案 5 :(得分:1)

另一种方法是使用runif从矢量中选择一个项目。即

a <- c(1,2,0,7,5)
a[runif(1,1,6)]

让我们假设你想要一个每次运行时选择一个的函数(例如在模拟中很有用)。所以

a <- c(1,2,0,7,5)
sample_fun_a <- function() sample(a, 1)
runif_fun_a <- function() a[runif(1,1,6)]
microbenchmark::microbenchmark(sample_fun_a(), 
                           runif_fun_a(),
                           times = 100000L)

单位:纳秒

sample_fun_a() - 4665

runif_fun_a() - 1400

在这个例子中,

runif似乎更快。