developer tip

R? 목록에서 임의의 요소를 선택하십시오.

copycodes 2020. 12. 4. 19:16
반응형

R? 목록에서 임의의 요소를 선택하십시오.


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

일부 언어에는 선택 기능이 있습니다.-하나의 난수를 선택하십시오 a-R 에서 어떻게?


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

위의 답변은 기술적으로 정확합니다.

sample(a,1)

그러나이 과정을 여러 번 반복하고 싶다면 주사위 던지기를 모방하고 싶다면 다음을 추가해야합니다.

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

도움이 되었기를 바랍니다.


샘플 사용시주의하세요!

sample(a, 1)예제의 벡터에는 훌륭하게 작동하지만 벡터의 길이가 1이면 원하지 않는 동작이 발생할 수 1:a있으며 샘플링에 벡터 사용합니다 .

따라서 다양한 길이 벡터에서 임의의 항목을 선택하려는 경우 길이 1의 경우를 확인하십시오!

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

R에서 난수 생성에 대한 기사를 읽어보십시오 .

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

sample이 경우 사용할 수 있습니다

sample(a, 1)

두 번째 속성은 하나의 난수 만 얻고 싶다는 것을 보여줍니다 . 일부 범위 runif함수 사이에 숫자를 생성하는 것이 유용합니다.


이 방법은 벡터가 길이 1 일 때 오류를 생성하지 않으며 간단합니다.

a[sample(1:length(a),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가 더 빠른 것 같습니다.

참고 URL : https://stackoverflow.com/questions/9390965/select-random-element-in-a-list-of-r

반응형