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

hhh*_*hhh 61 r

a<-c(1,2,0,7,5)
Run Code Online (Sandbox Code Playgroud)

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

Das*_*son 77

# Sample from the vector 'a' 1 element.
sample(a, 1)
Run Code Online (Sandbox Code Playgroud)

  • 小心样品!如果`a`的长度为1,是数字(在is.numeric意义上)和`a`> = 1,则样本的采样从`1:a`开始.请注意,当"a"具有不同的长度时,这种便利功能可能会导致不希望的行为. (8认同)

mol*_*ean 23

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

sample(a,1)
Run Code Online (Sandbox Code Playgroud)

但是,如果你想多次重复这个过程,让我们说你想模仿掷骰子,那么你需要添加:

a<-c(1,2,3,4,5,6)
sample(a, 12, replace=TRUE)
Run Code Online (Sandbox Code Playgroud)

希望能帮助到你.


pom*_*ber 14

使用样品时要小心!

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

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

sampleWithoutSurprises <- function(x) {
  if (length(x) <= 1) {
    return(x)
  } else {
    return(sample(x,1))
  }
}
Run Code Online (Sandbox Code Playgroud)


Chu*_*ris 5

阅读文章关于R.生成随机数

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

你可以sample在这种情况下使用

sample(a, 1)
Run Code Online (Sandbox Code Playgroud)

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


ska*_*kan 5

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

a[sample(1:length(a),1)]
Run Code Online (Sandbox Code Playgroud)