Foro de debate

Usar sort.int() dentro de un bucle for()

Usar sort.int() dentro de un bucle for()

de Maria Dulce Subida -
Número de respuestas: 2

Hola,

Tengo una matriz numérica (A) con n columnas y k filas. Quiero construir una rutina que me permita ordenar cada columna de la matriz por separado manteniendo la información sobre el índice original [usando la función sort.int(…,index.return=T)] y que me devuelva una matriz de matrices (B) compuesta por n nuevas matrices, cada una con un numero de k filas y 2 columnas en que la primera columna contenga los valores ordenados y la segunda los índices originales.

Mi primer intento fue:

> B<-matrix(data=NA,0, 0)

> for (i in n) {B[,i]<-sort.int(A[,i], method=c("quick"), index.return=TRUE)}

Pero R me devolvió el siguiente error:

“Error en inherits(x, "factor") : subíndice fuera de los límites”

La cuestión es que no puedo generar la matriz B manualmente porque tengo que aplicar este procedimiento a un gran numero de matrices iniciales (A’s) con dimensiones variables.

¿Tenéis alguna idea de cómo hacerlo?

Muchas gracias!

En respuesta a Maria Dulce Subida

Re: Usar sort.int() dentro de un bucle for()

de Maria Dulce Subida -

Hola a todos,

Al final ya lo he solucionado. Por si alguién tiene curiosidad, al final la solución es muy sencilla :

B<-apply(A, 2, function(x) sort.int(x, method=c("quick"), index.return=TRUE)).

Muchas gracias!

En respuesta a Maria Dulce Subida

Re: Usar sort.int() dentro de un bucle for()

de Manuel Muñoz Márquez -
Observaciones:

- El bucle for está mal escrito debería ser "for (i in 1:n)"

- El error de índices que te da es debido a que B es una matrix de dimensión 0x0, por tanto, 1 no es un índice válido.

- La función sort.int (te recomiendo que utilices sort) con el argumento index.return=TRUE no devuelve un vector, con lo que no se puede asignar a una fila de una matriz. En este caso sort devuelve una estructura de datos con dos vectores.