a<-c(1,2,0,7,5)
某些语言有一个选择器功能 - 从a
中选择一个随机数 - 在R中如何?
答案 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似乎更快。