2016-09-10 8 views
-2

Ich bin eine kleine Schleife, um eine Liste von Zahlen (1 bis 30) zu einer Untergruppe von 4 Gruppen nach dem Zufallsprinzip zuzuweisen. Ich möchte die Ausgänge der Schleife (für 4 Untermengen) als eine einzige Zeile in einer Variablen speichern und die Ergebnisse an anderer Stelle verwenden. Ich bekomme auch einige Warnungen, obwohl die Ausgabe korrekt auf dem Bildschirm angezeigt wird.Speichern der Ausgabe von einer Schleife als Liste in R

list = as.vector(c(6, 9, 3, 12) 
start <- 1 
end <- 6 
i <- 1 
while(i<=list){ 
    print(sample(start:end, replace=T)) 
    start <- start+list[i] 
    end <- end + list[i+1] 
    i <- i+1 
} 

[1] 3 5 6 1 5 6 
[1] 9 13 12 7 11 12 14 11 14 
[1] 16 17 17 
[1] 28 22 26 21 28 26 22 28 26 30 21 19 
Error in start:end : NA/NaN argument 
In addition: Warning messages: 
1: In while (i <= list) { : 
    the condition has length > 1 and only the first element will be used 
2: In while (i <= list) { : 
    the condition has length > 1 and only the first element will be used 
3: In while (i <= list) { : 
    the condition has length > 1 and only the first element will be used 
4: In while (i <= list) { : 
    the condition has length > 1 and only the first element will be used 
5: In while (i <= list) { : 
    the condition has length > 1 and only the first element will be used 

Ich kann die Gründe für diesen Fehler nicht finden. Bitte helfen Sie. Vielen Dank.

+0

'Karte (Funktion (Start, Stopp) {Probe (Start: Stopp, ersetzen = WAHR)}, cumsum (c (1,6,9,3)), cumsum (c (6,9,3,12))) ' – alistaire

+0

Ich habe versucht, 'y <- NULL zu initialisieren; temp <- Beispiel (...), y mysqlnew

+0

Danke @alistaire für Ihre Hilfe. es produziert immer noch die Ausgabe in vier Zeilen. Ich würde eine einzelne Zeilenausgabe aus zwei Gründen bevorzugen: (1) Die Stichprobengröße und Gruppierungen sind sehr groß. Daher wird eine einzelne Zeilenausgabe für Gruppen in m x n hilfreich sein. (2) Der cumsum-Wert würde im tatsächlichen Fall als ein Ergebnis größer als dieses Beispiel sein; Ich suche daher nach einer Liste, die für m x n Datensätze gesteuert werden kann. Danke noch einmal. – mysqlnew

Antwort

0

Adaequat for-Schleife als while-Schleife, keine Notwendigkeit der Untereinstellungen i Variable, wenn wir f Funktion

list = c(6, 9, 3, 12) 
start <- 1 
end <- 6 

for(i in seq(list)){ 
    if(i <= list[i]){ 
    start <- start+list[i] 
    end <- end + (list[i]+1) 
    print(sample(start:end, replace=T)) 
    } 

} 

[1] 10 8 11 7 11 10 12 
[1] 23 17 18 21 22 18 20 21 
[1] 25 21 27 23 26 26 23 25 22 
[1] 33 32 37 37 35 40 32 37 34 38 
+0

@mysqlnew In Ihrer Liste haben Sie 6,9,3,12, wenn Sie eine Schleifenuntereinstellung i = 1 ausführen, bei der letzten Iteration habe ich den Wert 4 und i = i + 1 wird 5, wobei 5 nicht kleiner als oder ist gleich 3 in Ihrer Liste, so erhalten Sie Fehlermeldungen –

+0

Dank Arun für die Klarstellung. for-Schleife wäre ein Problem für eine große Stichprobengröße. – mysqlnew

+0

@mysqlnew Bitte stimme bis zu meiner Antwort ab, wenn du dich richtig fühlst –

Verwandte Themen