ich ein wenig zusammen rekursive Funktion gehackt haben, das wird Finde alle aufeinanderfolgenden Triplets unter so vielen Vektoren, wie du passierst (mindestens drei müssen passieren). Es ist wahrscheinlich ein wenig grob, aber scheint zu funktionieren.
Die Funktion verwendet die Ellipse ...
zum Übergeben von Argumenten. Daher wird es viele Argumente (d. H. Numerische Vektoren) benötigen, die Sie angeben, und sie in die Liste items
einfügen. Dann befindet sich der kleinste Wert unter jedem übergebenen Vektor zusammen mit seinem Index.
Dann werden die Indizes der Vektoren, die dem kleinsten Triplet entsprechen, erzeugt und iteriert, wobei eine for()
Schleife verwendet wird, in der die Ausgabewerte an den Ausgabevektor out
übergeben werden.Die Eingabevektoren in items
werden beschnitten und erneut rekursiv in die Funktion übernommen. Nur wenn alle Vektoren NA
sind, d. H. Es gibt keine weiteren Werte in den Vektoren, gibt die Funktion das Endergebnis zurück.
Die Funktion kann aufgerufen werden, indem die Eingabevektoren als Argumente übergeben werden.
# input vectors
a = c(3,5)
b = c(6,1,8,7)
c = c(4,2,9)
# find all the triplets using our function
y <- tripl(a,b,c)
Das Ergebnis ist eine Liste, die alle neccesary Informationen enthält, wenn auch ungeordnet.
print(y)
# [[1]]
# [1] 1 2 3
#
# [[2]]
# [1] 4 5 6
#
# [[3]]
# [1] 7 9 NA
#
# [[4]]
# [1] 8 NA NA
Bestellung alles kann sapply()
getan werden:
# put everything in order
sapply(y, function(x){x[order(x)]}) %>% t
# [,1] [,2] [,3]
# [1,] 1 2 3
# [2,] 4 5 6
# [3,] 7 9 NA
# [4,] 8 NA NA
Die Sache ist, dass es nur ein Wert pro Vektor verwendet Drillinge zu finden. Es wird daher das aufeinanderfolgende Triplett c(6,7,8)
unter z. c(6,7,11)
, c(8,9,13)
und c(10,12,14)
. In diesem Fall würde c(6,8,10)
zurückgegeben (siehe unten).
a<-c(6,7,11)
b<-c(8,9,13)
c<-c(10,12,14)
y <- tripl(a,b,c)
sapply(y, function(x){x[order(x)]}) %>% t
# [,1] [,2] [,3]
# [1,] 6 8 10
# [2,] 7 9 12
# [3,] 11 13 14
Muss jedes Element in einem Triplet aus verschiedenen Arrays stammen? Wird '{2,3,4}' als gültiges Triplett betrachtet? – Psidom
Ja! , {2,3,4}, {6,7,8} oder {7,8,9} ist nicht gültig. –