R Tupel% in% Operator

8

Ich habe vor ein paar Tagen nach einem Weg gesucht, um zu prüfen, ob ein Zeilenvektor in irgendeinem Satz von Zeilenvektoren in R enthalten ist. Grundsätzlich möchte ich den Operator %in% verallgemeinern, um ein Tupel anstelle jedes Eintrags zu finden in einem Vektor. Zum Beispiel möchte ich:

%Vor%

für meinen erfundenen Operator %tuple.in% , weil der Zeilenvektor c("A",3) kein Zeilenvektor in data.set ist. Mit dem Operator %in% erhalten Sie:

%Vor%

weil "A" und 3 sind in data.set , was ich nicht will.

Ich habe zwei Fragen. Erstens: Gibt es dafür gute Lösungen?

Zweitens, da ich sie nicht finden konnte (selbst wenn sie existieren), habe ich versucht, meine eigene Funktion dafür zu schreiben. Es funktioniert für eine Eingabematrix von Zeilenvektoren, aber ich frage mich, ob irgendwelche Experten Verbesserungen vorgeschlagen haben:

%Vor%

Ich sehe ein paar Probleme damit, von denen ich nicht weiß, wie ich sie beheben soll. Zuerst möchte ich, dass der Basisfall zu Beginn der Funktion klar ist. Ich habe das nicht geschafft, weil ich matrix1[2:nrow(matrix1),] im rekursiven Aufruf übergeben habe, was zu einem Fehler führt, wenn matrix1 eine Zeile hat. Anstatt also zu einem Fall zu kommen, in dem matrix1 leer ist, habe ich am Ende eine if-Bedingung, die entscheidet, ob weitere Iterationen notwendig sind.

Zweitens denke ich, dass die Verwendung von rbind() am Anfang schlampig ist, aber ich brauchte sie, wenn matrix1 auf eine einzige Zeile reduziert wurde. Ohne rbind() zu verwenden, führte ncol(matrix1) im 1-Zeilen-Fall zu einem Fehler. Ich denke, meine Probleme hier haben mit einem Mangel an Wissen über R-Datentypen zu tun.

Jede Hilfe wäre willkommen.

    
ASV 14.03.2014, 19:44
quelle

2 Antworten

5

Ich frage mich, ob Sie das etwas komplizierter gemacht haben, als es ist. Zum Beispiel

%Vor%

Sie könnten dies weiter unterteilen, wenn Sie sich um die Bestellung kümmern oder Sie könnten die Funktion leicht ändern:

%Vor%

ein weiteres Beispiel mit einem längeren Vektor

%Vor%

Ich sehe ein passendes Paar:

%Vor%

aber nur drei

für Ihre einzelne Zeile Fall:

%Vor%

Hier ist eine einfache Funktion mit dem obigen Code

%Vor%

scheint zu funktionieren, also machen wir unseren eigenen %in% Operator:

%Vor%

und probier sie aus

%Vor%     
rawr 14.03.2014, 21:21
quelle
0

Macht das, was Sie wollen (sogar für mehr als 2 Spalten)?

%Vor%     
Stephan Kolassa 14.03.2014 19:56
quelle

Tags und Links