Ich habe folgenden Code, den ich mit for-Schleife ausführen, um ein 3D-Array "newarr" zu generieren.R: Verwenden von Mapply, um Schleife zu vermeiden
n1<-c(1,2,3,4,5)
n2<-c(3,4,5,6,7)
n3<- c(4,5,6,7,8)
afun <- function(y,p,q,r){
calc=1/(1+(((y-p)/q)^(2*r)))
return(calc)
}
newarr<- array(dim = c(4,5,5))
Amat<-matrix(data=c(1:10,NA,NA,NA,NA,15:20),nrow = 4,ncol = 5)
Bmat<-matrix(data=c(1:6,NA,NA,NA,NA,11:20),nrow = 4,ncol = 5)
Qmat<- +(!is.na(Amat) & !is.na(Bmat))
for(i in 1:5){
res<-afun(Amat,n1[i],n2[i],n3[i])
newarr[,,i]<- res
}
Ich möchte Mapply
verwenden (oder eine Funktion anwenden) statt for
Schleife. arr2 < - array ((mapply (funktion (x, y, n1, n2, n3) if (x == 1) afun (y, n1, n2, n3) sonst 0, Qmat, Amat, n1, n2, n3)), C (4,5,5))
Der folgende Code scheint aber ohne Bedingung zu helfen, wie weiter beschrieben:
newarr < - array (mapply (afun, n1, n2, n3, MoreArgs = list (y = Amat)), c (4,5,5))
Ich möchte eine Bedingung mit Qmat (eine 4x5-Matrix mit 0 und 1), so dass, wenn '0' beobachtet wird, sollte keine Operation enthalten durchgeführt werden und '0'-Wert zur Füllmatrix zurückgeben. Führen Sie für 1s in Qmat die Funktion 'afun' aus, und geben Sie den Wert zu "newarr" zurück, um eine 3D-Matrix zu bilden.
Danke für die Hilfe !!
Was ist die Logik Ihres Teils mit 'Qmat'? Es ist nicht klar aus Ihrer Frage. – jogo
Ich werde einige genaue Informationen liefern. Amat ist eine Matrix wie unten gezeigt: Amat <-Matrix (Daten = c (1: 10, NA, NA, NA, NA, 15: 20), nrow = 4, ncol = 5) Bmat <-Matrix (Daten = c (1: 6, NA, NA, NA, NA, 11: 20), now = 4, ncol = 5) Qmat <- + (! is.na (Amat) &! is.na (Bmat)). Qmat wird eine Matrix von 4 x 5 mit den Werten 0 und 1 erzeugen. Ich möchte eine Bewertung des "newarr" -Werts durchführen, wenn Qmat 1 entspricht. Hoffe, es erklärt. – Sam
Lassen Sie uns sehen, ob ich den Punkt bekommen habe: Für jede 1 in Qmat erhalten Sie das 3D-Array 'newarr' (ist es immer das gleiche 3D-Array?) Und für jede 0 in Qmat möchten Sie 0 (oder eine 3 -Dimensional Array in der gleichen Form wie 'newarr' mit Werten 0?). Wie sollte das Ergebnis aussehen, ein 5-dimensionales Array? Bitte stellen Sie Ihre Klarstellungen über die Logik in Ihrer Frage, dh bearbeiten Sie Ihre Frage: https://stackoverflow.com/posts/44115125/edit – jogo