2016-07-11 19 views
1

zu plotten Ich versuche, eine doppelte for Schleife zu schreiben, um zwei Ausgänge in Folge zu plotten.For-Schleifen, um zwei Ausgänge in Folge in R

Basierend auf den beiden folgenden Vektoren:

vec.a <- c("a1", "a2", "a3") 
vec.b <- c("b1", "b2", "b3") 

habe ich versucht, die erste Schleife:

for (i in vec.a){ 
    cat(i) 
    for (j in vec.b){ 
     cat(j, "| ") 
    } 
} 

Und die Ausgabe war:

a1b1 | b2 | b3 | a2b1 | b2 | b3 | a3b1 | b2 | b3 |

habe ich versucht, eine zweite Schleife :

for (i in vec.a){ 
    for (j in vec.b){ 
     cat(i) 
     cat(j, "| ") 
    } 
} 

Und der Ausgang war:

a1b1 | a1b2 | a1b3 | a2b1 | a2b2 | a2b3 | a3b1 | a3b2 | a3b3 |

Aber der Ausgang gewünscht ist:

a1b1 | a2b2 | a3b3

Wie dies zu tun?

Update:

Ich möchte die Grafiken zwischen den Spalten in der gleichen Position der beiden Datenrahmen vergleichen. Aber die gezeigte Sequenz ist nicht die, die ich begehre. Ich denke, dass die Logik die gleiche wie im obigen Beispiel ist.

set.seed(99) 
df.a <- matrix(rnorm(50), 10, 10, # 10 rows and 10 columns 
      dimnames=list(paste("p", 1:10, sep = ""), 
         paste("sp.A", 1:10, sep = ""))) 

df.b <- matrix(rnorm(50), 20, 10, # 20 rows and 10 columns 
      dimnames=list(paste("p", 1:20, sep = ""), 
         paste("sp.B", 1:10, sep = ""))) 

die Grafik zu vergleichen, ich etwas wie folgt verwendet:

par(mfrow = c(1,2)) 
invisible(lapply(colnames(df.a[ ,1:ncol(df.a)]), function(x){ 
    invisible(lapply(colnames(df.b[ ,1:ncol(df.b)]), function(w){ 
    plot(df.a[ ,x], main = x) 
    plot(df.b[ ,w], main = w) 
    })) 
})) 

Wie die erste Spalte der mit der ersten Spalte der df.b gepaart df.a zu zeichnen, und so weiter?

+0

Bitte meine Antwort aktualisiert sehen. Sie werden jedoch die gleiche Anzahl von Zeilen in den beiden Matrizen benötigen, andernfalls wird plot() versuchen, zwei Vektoren ungleicher Länge zu zeichnen (try plot (1:10, 1:20))! – srao

+0

Ah, ich denke, ich verstehe was du meinst, ignoriere den obigen Kommentar. Ich werde meine Antwort reparieren. – srao

Antwort

1

Basierend auf Ihre Kommentare, ich glaube, Sie suchen mapply

mapply(FUN = cat, vec.a, vec.b, MoreArgs = list("| ", sep = "")) 

die oben in invisible() Einwickeln unterdrückt die Ausgabe von mapply

invisible(mapply(FUN = cat, vec.a, vec.b, MoreArgs = list("| ", sep = ""))) 

Lösung for-Schleife: Der folgende Code die gleiche Leistung erzeugt, sondern eine Verwendung für Schleife

for (i in seq_along(vec.a)){ 
    cat(vec.a[i], vec.b[i], "|", sep = "") 
} 

Lösung für aktuelle Frage

set.seed(99) 
df.a <- matrix(rnorm(50), 10, 10, # 10 rows and 10 columns 
       dimnames=list(paste("p", 1:10, sep = ""), 
          paste("sp.A", 1:10, sep = ""))) 

df.b <- matrix(rnorm(50), 20, 10, # 20 rows and 10 columns 
       dimnames=list(paste("p", 1:20, sep = ""), 
          paste("sp.B", 1:10, sep = ""))) 
par(mfrow = c(1,2)) 
for (i in 1:ncol(df.a)){ 
    plot(df.a[ ,i], main = i) 
    plot(df.b[ ,i], main = i) 
} 
1

Hier fügen wir die beiden Vektoren zusammen, die sie Zelle für Zelle binden werden. Sie binden alle Zellen zusammen, um eine einzelne Zeichenfolge zu erstellen, indem Sie "|" als Minimierungsparameter verwenden.

# Creating the vectors 
vec.a <- c("a1", "a2", "a3") 
vec.b <- c("b1", "b2", "b3") 

# Creating the output 
paste(vec.a,vec.b,sep="",collapse=" | ") 

Ausgang:

"a1b1 | a2b2 | a3b3" 
+0

Danke für die Antwort. Aber ich brauche wirklich eine Iteration, wie ein 'for'. Ich habe versucht, die Frage mit der Katze zu vereinfachen. Ich werde jedoch die Lösung verwenden, um zwei Korrelogramme zu erstellen und zu zeichnen, die auf zwei Datenrahmen mit jeweils unterschiedlichen Dimensionen basieren. –

+1

Können Sie uns ein Beispiel für die Ausgabe zeigen? –

+0

@KarloGuidoniMartins In Ihrem Beispiel haben Sie veca.a und vec.b als Vektoren angezeigt, aber Sie erwähnen Datenrahmen in Ihrem Kommentar? Wenn Sie sagen, dass die Datenrahmen unterschiedliche Dimensionen haben, haben sie dann die gleiche Anzahl an Zeilen? Abgesehen davon ist die for-Schleife einfach, Sie wollen nur die entsprechenden Elemente in jedem Vektor durchlaufen (siehe meine aktualisierte Antwort unten). – srao