Hola Alejandro,
Supongamos que los 19 archivos de texto que contienen las matrices se
encuentran en el directorio "alejandro/matrices". Intenta algo como
lo
siguiente:
setwd("alejandro/matrices")
f <- list.files(patter = ".txt") # contiene los nombres de los
txt files
info <- lapply(f, read.table) # lee todos los archivos
res <- lapply(info, function(x) x / rowSums(x)) # operacion sobre cada
matriz
Para obtener la informacion de la 5ta matriz, solo debes hacer
res[[5]]
Si quieres exportar las nuevas matrices solo debes hacer
sapply(1:length(res), function(i)
write.table(res[[i]], paste0("nueva", f[i]), col.names = TRUE,
row.names TRUE, sep = "\t", quote = FALSE))
En "alejandro/matrices" deben aparecer 19 archivos txt nuevos que
comienzan
con el nombre "nueva".
Saludos,
Jorge.-
2013/2/7 Alejandro Ayala <>
> Estimados.
>
> Su gentil ayuda con el siguiente problema:
>
> Tengo un total de 19 matrices en archivos de texto de dimensión (32x32) ,
> necesito que para cada fila de cada matriz se realice una operación
> especifica: La división entre cada componente y la suma correspondiente a
> la fila de la matriz en la que se este trabajando.
>
> El codigo que he utilizado es el siguiente:
>
> # creación de una matriz de dimensión 32x32 donde se va a almacenar los
> datos de la operación requerida
> for (i in 1:19)
> {
> mat.i<-paste("mat",i,sep="")
> assign(mat.i,matrix(0,32,32))
> data.matrix(mat.i)
> }
>
> # asignación a la nueva matriz de la operación requerida
> #para la matriz 1
> for (i in 1:32){
> isup.i<-paste("isup",i,sep="")
> if (sum(matriz1[i,])==0)
> mat1[i,]=0
> else
>
>
>
mat1[i,]<-assign(isup.i,as.vector(matriz1[i,]/sum(matriz1[i,]),mode="numeric"))
> }}
>
>
> # para la matriz 2
> for (i in 1:32){
> isup.i<-paste("isup",i,sep="")
> if (sum(matriz2[i,])==0)
> mat2[i,]=0
> else
>
>
>
mat2[i,]<-assign(isup.i,as.vector(matriz2[i,]/sum(matriz2[i,]),mode="numeric"))
> }}
>
> Esa operación tengo que extenderla a las 19 matrices, es decir tengo que
> crear un iterador sobre otro iterador, he intentado varias cosas pero con
> resultados negativos.
>
> He intentado con este código pero al poner una cuarta condición el paquete
> R me arroja el siguiente Error: tentativa de aplicar una no-función
>
> for (i in 1:32){
> isup.i<-paste("isup",i,sep="")
> if ((sum(matriz1[i,])==0) | (sum(matriz2[i,])==0) |
> (sum(matriz3[i,])==0)){
> mat1[i,]=0
> mat2[i,]=0
> mat3[i,]=0
> }
> else {
>
>
>
mat1[i,]<-assign(isup.i,as.vector(matriz1[i,]/sum(matriz1[i,]),mode="numeric"))
>
>
>
mat2[i,]<-assign(isup.i,as.vector(matriz2[i,]/sum(matriz2[i,]),mode="numeric"))
>
>
>
mat3[i,]<-assign(isup.i,as.vector(matriz3[i,]/sum(matriz3[i,]),mode="numeric"))
> }}
>
> De antemano muchisimas gracias por la ayuda
>
> [[alternative HTML version deleted]]
>
>
> _______________________________________________
> R-help-es mailing list
> R-help-es@r-project.org
> https://stat.ethz.ch/mailman/listinfo/r-help-es
>
>
[[alternative HTML version deleted]]