sagen, dass ich Teile mache, die in drei Größen, und jede Größe hat eine gewisse Toleranz:Multiplizieren jeder Komponente des Vektors durch einen anderen Vektor (was Vektor von m * n Länge)
target <- c(2, 4, 6)
tolerance <- c(0.95, 1.05)
Was ich d mag bis Ende mit einem Array, das für jedes Ziel (dh Ziel * 0,95, Ziel * 1,05) die Grenzen der Toleranz enthält:
tol = (2*0.95, 2*1.05, 4*0.95, 4*1.05, 6*0.95, 6*1.05)
Hier ist eine wirklich hässliche Art und Weise dorthin zu gelangen, aber ich weiß, dass es ist eine einfache Möglichkeit, dies zu tun.
j<-1
tol<-NULL
for (i in target){
tol[j] <- i*tolerance[1]
tol[j+1] <- i*tolerance[2]
j<-j+2
}
während "äußere" wäre nützlich für andere Funktionen neben dem Produkt, es ist erwähnenswert, dass alles, was es tut, ist einige zusätzliche Prüfungen und dann '% *%', wenn das 'FUN' Argument fehlt – eddi
@eddi In mathematischen Begriffen, Ihr Kommentar ist falsch. Bitte lernen Sie die Unterschiede zwischen einem dyadischen (äußeren) Produkt und einer Matrixmultiplikation "% *%" kennen. Dies ist ein Ausnahmefall, bei dem das Matrixprodukt zum gleichen Ergebnis führt, nur weil die "Matrizen" den Rang (1, m) und (n, 1) * haben. Das Matrixprodukt% *% führt in diesem Fall unnötige Summierungen durch. Die vom OP beschriebene Situation ist ein Standardbeispiel für die Verwendung von äußerem Produkt oder "% o%" und nicht für "% *%". – RHertel
Die Implementierung dieser verschiedenen Produkte in R ist eine andere Sache. Dort kann das Matrixprodukt auf die gleiche Weise behandelt werden, wenn Vektoren und nicht Matrizen als Eingabe verwendet werden. – RHertel