[R-es] ERROR: subscript out of bounds

Carlos Ortega cof en qualityexcellence.es
Mie Jul 22 18:23:23 CEST 2015


Hola,

Te adjunto un nuevo código comentado, que funciona y que incluye
explicaciones de porqué el error que obtenías:

#-----------------------------
library(ape)
my.phylo<-read.tree("150_BootstrapConsensusTree_Cantabrian_ML.nwk")
my.sample <- read.delim("my.sample.txt")
my.sample<-read.table("my.sample.txt",sep="\t", header=T, row.names=1)

#Transformo a matriz my.sample
my.sampleMat <- as.matrix(my.sample)

#Cambio los nombres de las columnas para que tengan el mismo tipo de
formato que las de dist.mat
#Los puntos por guion bajo.
library(stringr)
colnames(my.sampleMat) <- str_replace_all(colnames(my.sampleMat), "\\.","_")

#dist.mat es la matriz de distancias de referencia sobre la que comparo
my.sample.
dist.mat<-cophenetic(my.phylo)

#Modifico nombres de filas y columnas de dist.mat quito acento
library(stringr)
colnames(dist.mat) <- str_replace_all(colnames(dist.mat), "\'","")
rownames(dist.mat) <- str_replace_all(rownames(dist.mat), "\'","")

#Solo me quedo de my.sample con las columnas con nombres que estan en
dist.mat
#Si hay un nombre de una especie que no esta en dist.mat no se puede
#calcular la distancia y aparece el error.
my.sampleGood <- my.sampleMat[, intersect(colnames(my.sampleMat),
colnames(dist.mat))]

#De 54 columnas paso a 13 en my.sample.
#Ahora my.sampleGood está ya listo para poder aplicarle la funcion y
calcular distancias.

library(SDMTools)

sntd.a.function <- function(x){
  com.names <- names(x[x > 0])                        # Get de names of the
species present in a community
  my.com.dist <- dist.mat[com.names, com.names]
  diag(my.com.dist) = NA                              # Diagonal values to
NA -> Matriz sim, diagonal zero
  wt.sd(apply(my.com.dist,1,min,na.rm=T), x[x>0])
}

#Aplico funcion.
proba<-apply(my.sampleGood, MARGIN = 1, sntd.a.function)
#Resultado:
#La Preste      Toran  Els Ports
#0.07185927 0.07129029 0.04948652

#-----------------------------


Saludos,
Carlos Ortega
www.qualityexcellence.es


2015-07-22 10:40 GMT+02:00 nuria bs <laptepo en hotmail.com>:

> Buenas,
>
> Cuando intento ejecutar el siguiente codigo, me aparece el error " Error
> in dist.mat[com.names, com.names] : subscript out of bounds". Porque me
> aparece este error? Y como puedo solucionarlo?
> Gracias!!!
>
> *CONSOLE:*
>
> > my.phylo<-read.tree("150_BootstrapConsensusTree_Cantabrian_ML.nwk")> my.sample <- read.delim("C:/Filogenia/my.sample.txt")> my.sample<-read.table("my.sample.txt",sep="\t", header=T, row.names=1)
>
> > library(SDMTools)
> > sntd.a.function <- function(x){   com.names <- names(x[x > 0])                        # Get de names of the species present in a community   my.com.dist <- dist.mat[com.names, com.names]       # Distance matrix   diag(my.com.dist) = NA                              # Diagonal values to NA -> Matriz sim, diagonal zero   wt.sd(apply(my.com.dist,1,min,na.rm=T), x[x>0])      }
>
> > dist.mat<-cophenetic(my.phylo)> proba<-apply(my.sample, MARGIN = 1, sntd.a.function)
>
> Error in dist.mat[com.names, com.names] : subscript out of bounds
>
>
> _______________________________________________
> R-help-es mailing list
> R-help-es en r-project.org
> https://stat.ethz.ch/mailman/listinfo/r-help-es
>
>


-- 
Saludos,
Carlos Ortega
www.qualityexcellence.es

	[[alternative HTML version deleted]]



Más información sobre la lista de distribución R-help-es