a<-c(1,2,0,7,5)
Einige Sprachen haben eine Auswahlfunktion - wählen Sie eine Zufallszahl aus a
- wie in R?
Antworten:
# Sample from the vector 'a' 1 element.
sample(a, 1)
a
die Länge 1 ist, numerisch ist (im Sinne von is.numeric) und a
> = 1 ist, erfolgt die Abtastung über die Stichprobe von 1:a
. Beachten Sie, dass diese Komfortfunktion zu unerwünschtem Verhalten führen kann, wenn sie a
unterschiedlich lang ist.
Seien Sie vorsichtig bei der Verwendung der Probe!
sample(a, 1)
funktioniert gut für den Vektor in Ihrem Beispiel, aber wenn der Vektor die Länge 1 hat, kann dies zu unerwünschtem Verhalten führen. Er verwendet den Vektor 1:a
für die Abtastung.
Wenn Sie also versuchen, ein zufälliges Element aus einem Vektor unterschiedlicher Länge auszuwählen, überprüfen Sie den Fall der Länge 1!
sampleWithoutSurprises <- function(x) {
if (length(x) <= 1) {
return(x)
} else {
return(sample(x,1))
}
}
Lesen Sie diesen Artikel über das Generieren von Zufallszahlen in R.
http://blog.revolutionanalytics.com/2009/02/how-to-choose-a-random-number-in-r.html
Sie können sample
in diesem Fall verwenden
sample(a, 1)
Das zweite Attribut zeigt an, dass Sie nur eine Zufallszahl erhalten möchten . Das Generieren von Zahlen zwischen bestimmten Bereichsfunktionen runif
ist nützlich.
Eine Alternative besteht darin, ein Element mit runif aus dem Vektor auszuwählen. dh
a <- c(1,2,0,7,5)
a[runif(1,1,6)]
Nehmen wir an, Sie möchten eine Funktion, die bei jeder Ausführung eine auswählt (nützlich beispielsweise in einer Simulation). Damit
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)
Einheit: Nanosekunden
sample_fun_a () - 4665
runif_fun_a () - 1400
runif scheint in diesem Beispiel schneller zu sein.