2014-02-28 7 views
7

Ich weiß, dass es bereits einige Threads zu diesem Thema gegeben hat, aber durch die ich nicht herausfinden konnte, was das Problem sein könnte - bitte vergib mir, dass ..R Anzahl der zu ersetzenden Elemente ist kein Vielfaches der Ersatzlänge/Ergebnisse jedoch korrekt

ich versuche, den Code

for (i in 1:a){ 
    matrix$new_column[i]<-which(matrix[i,1:b-1]==matrix$col_b[i]) 
    } 

Was ich versuche zu laufen: für die Matrix von eine Linien und b Spalten, in jedem line's Spalten zu b-1, finden die eine, die den gleichen Wert wie die in Spalte enthält b (es gibt immer einen solchen Wert) und die entsprechende Spaltennummer in die * NEW_COLUMN schreiben *

hält My-Code

den Fehler zu werfen

Warnung in Matrix $ NEW_COLUMN [i] < - die (Matrix [i,: Anzahl der Elemente zu ersetzen ist nicht ein Vielfaches von Ersatz Länge

Das Ergebnis ist jedoch völlig korrekt. Ich habe

versucht
  • die * * NEW_COLUMN Schaffung mit 0en gefüllt ersten
  • die End-Indizes von a zu a-1 oder a + 1

Wie gesagt ändert, Das Ergebnis ist korrekt, aber ich denke, ich sollte die Warnmeldung nicht bekommen, wenn ich alles richtig gemacht habe, also bin ich wirklich dankbar für jeden Rat, wie ich das beheben kann.

Schließlich frage mich nicht, warum ich 1: b-1 wählte, als ich von 2 zu b-1 gehen wollte, ich sah gerade, dass wenn ich 2: b-1 verwenden würde, würde es tatsächlich beginnen Spalte 3 ..

+0

Das ist kein Fehler, es ist eine Warnung. –

+0

ja, tut mir leid, mein Schlechter. Aber sollte es nicht Warnungen geben, wenn ich es richtig gemacht habe? – tfp

+0

Dies bedeutet, dass die Länge Ihres neuen Vektors nicht die gleiche Länge wie die Länge des neuen Vektors hat.Also kann etwas falsch sein, obwohl die Ergebnisse korrekt aussehen. –

Antwort

6

which() kann einen Vektor zurückgeben, wenn mehrere Übereinstimmungen vorhanden sind. Zum Beispiel:

which((1:12)%%2 == 0) # which are even? 

Ist matrix$col_b[i] einzigartig? Die Ergebnisse können immer noch korrekt aussehen. Beachten Sie, was in diesem Fall passiert:

x <- 1:2 
x[1] <- 3:4 
x 

Auch dann, wenn 1:b-1 nicht geben Sie die Zahlen 1-b - 1 aber die Zahl 1-b, alle minus 1:

b <- 10 
1:b-1 

Sie müssen Klammern erzwinge zuerst die Subtraktion: 1:(b - 1).

+0

OK, ich habe den Fall nicht vorausgesehen, dass ich zwei gleiche Werte haben könnte. Behoben und der Fehler ging weg - Danke! Was die fehlende Klammer betrifft, danke auch dafür :) – tfp

Verwandte Themen