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]]