2017-05-23 2 views
2

Ich möchte jedes Element eines Vektors mit spezifischer Wahrscheinlichkeit p Probe. Dies ist, wie ich es noch, ich finde es schwer zu glauben, dass dies die eleganteste Art und Weise ist:R: Probe jedes Element eines Vektors mit spezifischer Wahrscheinlichkeit * elegant *

vec <- letters[1:5] 
p <- 0.8 
sampInd <- sample(c(TRUE, FALSE), length(vec), prob = c(p, 1-p), replace = TRUE) 
vec[sampInd] 
[1] "c" "d" "e" 

Eine weitere Möglichkeit, eine Bernoulli-Verteilung unter Verwendung von:

sampInd <- ifelse(rbinom(length(vec), 1, p) == 1, TRUE, FALSE) 
vec[sampInd] 
[1] "a" "b" "c" "e" 

Bin ich etwas base Funktion fehlt zu tun dies eleganter oder über komplizierter meine Verwendung von sample oder rbinom? Es interessiert mich nicht viel für die Geschwindigkeit, obwohl es immer eine gute Sache ist.

+3

Nicht sicher, ob es eleganter ist, aber ich denke, ich würde 'vec [Runif (Länge (vec)) Miff

+1

@Miff Sie sollten dies als Antwort hinzufügen, wenn nichts Wunderbares kommen wird, werde ich es akzeptieren, wie es meiner Beurteilung nach * eleganter ist. –

+1

Es ist im Wesentlichen das gleiche wie Ihre zweite Lösung, aber Sie müssen nicht "ifelse" haben. 'vec [rbinom (Länge (vec), 1, p) == 1]' –

Antwort

0

(über einen Tag, da @Miff mit dieser Antwort kommentiert, damit ich es hier aufschreiben würde :)

vec[runif(length(vec)) < p] 

die eleganteste Art, wie ich im Moment wissen.

Verwandte Themen