2016-05-16 3 views
0

Was ich versuche, ist, die Beispielfunktion in R zu verwenden, um eine Folge von Zahlen in mehrere gleiche Teile für die spätere Verwendung aufzuteilen, aber ich habe es schwer, keine wiederholten Ziffern zu bekommen selbst wenn ich anzeige, dass ich keine Ersatzwerte möchte.Problem mit der Beispielfunktion in R

trials <- seq(1,21,1) 
set.seed(5) 
p1.trials <- sample(trials, 7, replace=F) 
p1.trials 

Dies ergibt den Vektor: 5, 14, 18, 6, 2, 12, 8

trials <- trials[-p1.trials] 
p2.trials <- sample(trials, 7, replace=F) 
p2.trials 

Dies ergibt den Vektor: 19, 20, 3, 7, 9, 4, 16

p3.trials <- trials[-p2.trials] 
p3.trials 

Daraus ergibt sich der Vektor: 1, 3, 9,10, 13, 16, 17, 19, 20, 21

Kann jemand mir helfen herauszufinden, warum (a) ich wiederholte immer Werte (e. g., "3" ist in den p2.trials und p3.trials) und (b) warum erzeugt die p3.trials-Teilmenge 10 Zahlen statt 7?

Antwort

1

Das erste Mal funktioniert, aber nach dem ersten Mal, wird der Wert jedes einzelnen Mitglieds der Prüfungen und der Index jedes Mitglied von Studien unterschiedlich sind, ist das Problem mit -, stattdessen Verwendung setdiff:

trials <- seq(1,21,1) 
set.seed(5) 
p1.trials <- sample(trials, 7, replace=F) 
p1.trials 
trials <- setdiff(trials,p1.trials) 
+0

Dies funktioniert, oder schauen Sie in 'createFolds' aus' library (caret) ' – TBSRounder

0

Sie können das Ganze effizienter durchführen, indem Sie die Funktion sample einmal verwenden, um die Sequenz zu randomisieren, und dann in 3 gleiche Gruppen unterteilen.

# Create data 
trials <- seq(1,21,1) 
set.seed(5) 

# Randomize trials before subsetting 
random_order <- sample(1:21, replace=FALSE) 
trials2 <- trials[random_order] 

# Subset 
p1.trials <- trials2[1:7] 
p2.trials <- trials2[8:14] 
p3.trials <- trials2[15:21] 

# Check 
p1.trials 
## 5 14 18 6 2 12 8 
p2.trials 
## 16 13 17 4 21 3 10 
p3.trials 
## 20 7 19 11 15 9 1