2016-05-23 15 views
0

Ich binde abholen bins.txt und speichert seine Daten in "Daten". Ich habe versucht, es zu drucken, und es druckt richtig.Speichern der Werte von IF-Schleife in einem Vektor

data <- read.csv("bins.txt", header = FALSE) 
for (n in 1:24060) 
    { 
    j=(data[n,]) 
    for (i in 1:20) 
    { 
     m=(i-1)*80 
     n=(i*80)-1 
     if(m<j && j<n) 
     {   
     print (i) 
     } 


    } 
    } 

Ich möchte nicht (i) drucken, aber die Werte von i in einem gewissen Vektor speichern und außerhalb der Schleife drucken und geben es in

obs="vector" 

Etwas wie diese

+0

Können Sie eine Beispieldaten bereitzustellen, die Ihr Problem und die entsprechende erwartete Ausgabe darstellt? –

+0

Sie müssten einen Vektor vor der Schleife definieren und ihm zuweisen, aber Sie brauchen fast sicher keine Schleifen. Ein Hinweis: 'if' ist nicht vektorisiert, aber' ifelse' ist. Wenn Sie [Ihr Problem gut erklären] (http://stackoverflow.com/questions/5963269/how-to-make-a-great-r-reproducible-example/5963610#5963610), erhalten Sie wahrscheinlich eine vollständige Antwort . – alistaire

Antwort

0

Keine Ahnung Was ist Ihre bins.txt? Da ich wirklich verschachtelte Schleifen nicht mag, ist hier ein Vorschlag:

(i) definiert die zwanzig Paare von min (oder m) und max (oder j) Werten in Zustandsprüfung:

m <- lapply(1:20, function(x) (x-1)*80) 
n <- lapply(1:20, function(x) (x*80)-1) 

(ii) Rückkehr eine Liste von zwanzig Vektoren Daten basierend gegen basierend auf die zwanzig Kombinationen von m und n:

lapply(1:20, function(x) dat[m[[x]] < dat & dat < n[[x]]]) 

Unter der Annahme, dass Ihre Daten

dat <- seq(0, 1000, length.out=50) 

Die ersten sechs Vektoren zurückgekehrt sind:

[[1]] 
[1] 20.40816 40.81633 61.22449 

[[2]] 
[1] 81.63265 102.04082 122.44898 142.85714 

[[3]] 
[1] 163.2653 183.6735 204.0816 224.4898 

[[4]] 
[1] 244.8980 265.3061 285.7143 306.1224 

[[5]] 
[1] 326.5306 346.9388 367.3469 387.7551 

[[6]] 
[1] 408.1633 428.5714 448.9796 469.3878 
Verwandte Themen