Quindi ho due matrix separati (mat1 e mat2) e ho bisogno di passare attraverso di loro per fare un controllo. Ho bisogno di memorizzare i risultati in una terza matrice.R - Passa attraverso diverse matrici senza usare il loop! Aiuto per un semplice codice
Ritengo che il mio codice sia molto lungo per lo scopo.
Volevo avere alcuni dei vostri suggerimenti per evitare il loop.
Così la mia prima matrice simile a questo (dput alla fine)
wit5.001 wit5.002 wit5.003 wit5.004 wit5.005 wit5.006 wit5.007 wit5.008 wit5.009 wit5.010
[1,] 1 1 1 1 1 1 1 1 1 1
[2,] 1 1 1 1 1 1 1 1 1 1
[3,] 1 1 1 1 1 1 1 1 1 1
[4,] 1 1 1 1 1 1 1 1 1 1
[5,] 1 1 1 1 1 1 1 0 1 1
[6,] 1 1 1 1 1 1 1 0 0 0
[7,] 0 1 1 1 1 1 1 1 1 1
[8,] 1 1 1 1 1 1 1 1 1 1
[9,] 1 1 1 1 1 1 1 1 1 1
[10,] 1 1 1 1 1 1 1 1 1 1
mia seconda matrice ha una struttura simile.
Qui creo la mia terza matrice - per archiviare i risultati del controllo.
matCheck <- matrix('ok', ncol = ncol(mat1), nrow = nrow(mat1))
Ecco il mio ciclo - che vorrei evitare
for(j in 1:ncol(mat1)){
for(i in 1:nrow(mat1)){
if(mat1[i,j] == 1 & mat2[i,j] == 1)
{matCheck[i,j] <- 'ok'}
if(mat1[i,j] != 1 & mat2[i,j] == 1)
{matCheck[i,j] <- '!'}
}
}
Il risultato del controllo
[,1] [,2] [,3] [,4] [,5] [,6] [,7] [,8] [,9] [,10]
[1,] "ok" "ok" "ok" "ok" "ok" "ok" "ok" "ok" "ok" "ok"
[2,] "ok" "ok" "ok" "ok" "ok" "ok" "ok" "ok" "ok" "ok"
[3,] "ok" "ok" "ok" "ok" "ok" "ok" "ok" "ok" "ok" "ok"
[4,] "ok" "ok" "ok" "ok" "ok" "ok" "ok" "ok" "ok" "ok"
[5,] "ok" "ok" "ok" "ok" "ok" "ok" "ok" "ok" "ok" "ok"
[6,] "ok" "ok" "ok" "ok" "ok" "ok" "ok" "!" "!" "ok"
[7,] "!" "ok" "ok" "ok" "ok" "ok" "ok" "ok" "ok" "ok"
[8,] "ok" "ok" "ok" "ok" "ok" "ok" "ok" "ok" "ok" "ok"
[9,] "ok" "ok" "ok" "ok" "ok" "ok" "ok" "ok" "ok" "ok"
[10,] "ok" "ok" "ok" "ok" "ok" "ok" "ok" "ok" "ok" "ok"
Qualche suggerimento?
Ecco matrice 1
mat1 = structure(c(1, 1, 1, 1, 1, 1, 0, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1,
1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1,
1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1,
1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 0, 0, 1, 1, 1, 1,
1, 1, 1, 1, 1, 0, 1, 1, 1, 1, 1, 1, 1, 1, 1, 0, 1, 1, 1, 1), .Dim = c(10L,
10L), .Dimnames = list(NULL, c("wit5.001", "wit5.002", "wit5.003",
"wit5.004", "wit5.005", "wit5.006", "wit5.007", "wit5.008", "wit5.009",
"wit5.010")))
Ecco matrice 2
mat2 = structure(c(1, 0, 0, 1, 1, 1, 1, 1, 1, 1, 1, 0, 0, 1, 1, 1, 1,
1, 1, 1, 0, 0, 0, 1, 1, 1, 1, 1, 1, 0, 0, 0, 0, 1, 1, 1, 1, 1,
1, 0, 0, 0, 0, 1, 1, 1, 1, 1, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 0,
0, 0, 0, 0, 1, 0, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 0, 0, 0,
0, 0, 0, 0, 0, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0), .Dim = c(10L,
10L), .Dimnames = list(NULL, c("wit5.020", "wit5.021", "wit5.022",
"wit5.023", "wit5.024", "wit5.025", "wit5.026", "wit5.027", "wit5.028",
"wit5.029")))
@Frank - Mi dispiace per colpa mia - hai ragione, non suppongono di essere di dimensioni diverse (ho fatto un errore nel mio sottoinsieme). Ho corretto il codice. – giacomo
Ho intenzione di provare le vostre proposte ragazzi grazie – giacomo
è così semplice! oh no ... Dopo tutto lo sforzo da mettere nei miei loop;) Grazie a @Frank - mettilo come risposta – giacomo