[R-es] Construir matriz de distancias
Marcelino de la Cruz Rot
m@rcelino@del@cruz @ending from urjc@e@
Vie Sep 7 14:13:25 CEST 2018
Vaya, qué mala suerte. Yo lo probé en la consola de Windows y funcionó
sin problema.
¿Tal vez sea por la versión de alineR? La mía es la 1.1.4.
Saludos
El 07/09/2018 a las 11:38, Juan Abasolo escribió:
> Me encantaría saber pensar así de una.
> Creo que entiendo bien lo que me decís, pero no lo puedo poner en
> marcha en mi computadora, por algo que no sé qué será.
>
> Cuando llego a:
> > cosa<-aline(w1=x,w2=y)
> En RStudio me dice que R sufrió algo. Probé directamente desde la
> consola linux y también:
>
> > cosa<-aline(w1=x,w2=y)
> *** stack smashing detected ***: /usr/lib/R/bin/exec/R terminated
> Aborted
>
> Supongo que ese es un problema que no tiene nada que ver con el
> original, pero de alguna manera se juntó todo
>
> Hau idatzi du Marcelino de la Cruz Rot (marcelino.delacruz using urjc.es
> <mailto:marcelino.delacruz using urjc.es>) erabiltzaileak (2018 ira. 7, or.
> (10:33)):
>
> Hola Juan,
>
> # No conozco ninguna función que haga lo que propones, pero no es muy
> difícil implementarlo en R.
> # Suponiendo que estos son tus datos de partida,
>
> x0<- c("cansado",
> "cansadisimo","cansau","reventado","reventao",NA,"canso")
> namesx0<-LETTERS[1:7]
>
>
> # Lo de los NA's deberías resolverlo (eliminarlos) al principio,
> es decir:
>
> ok<-!is.na <http://is.na>(x0)
> x0.ok<-x0[ok]
> namesx0.ok<-namesx0[ok]
>
>
>
> # Una vez eliminados, como aline() calcula distancias entre elementos
> pareados de dos vectores, lo primero que tienes que hacer es
> justamente
> crear esos vectores con todos los valores pareados con todos
> x<- rep(x0.ok, length(x0.ok))
> y<-rep(x0.ok, each=length(x0.ok))
>
> # es decir,
> cbind(x,y)
>
> # ahora calculas la distancia aline entre los elementos
> cosa<-aline(w1=x,w2=y)
>
> # y lo formateas coo matriz simétrica
>
> cosa.m<- matrix(cosa, nr=length(x0.ok),nc=length(x0.ok))
> cosa.m
>
>
> # le pones los nombres a las filas y columnas
> dimnames(cosa.m)<-list(namesx0.ok, namesx0.ok)
> cosa.m
>
> # y lo presentas como matriz de distancias.
> as.dist(cosa.m)
>
>
>
> Aunque ya puestos, ¿porqué no implementarlo como una función?:
>
>
>
> aline.dist<- function(x0, namesx0){
> require(alineR)
> ok<-!is.na <http://is.na>(x0)
>
> x0.ok<-x0[ok]
> namesx0.ok<-namesx0[ok]
> x<- rep(x0.ok, length(x0.ok))
> y<-rep(x0.ok, each=length(x0.ok))
>
> cosa<-aline(w1=x,w2=y)
>
> cosa.m<- matrix(cosa, nr=length(x0.ok),nc=length(x0.ok))
> dimnames(cosa.m)<-list(namesx0.ok, namesx0.ok)
> return(as.dist(cosa.m))
>
> }
>
>
> # A ver qué tal:
>
> aline.dist(x0, namesx0)
>
> Hmm, seguro que salen unos dendrogramas muy interesantes ;-)
>
> plot(hclust(aline.dist(x0, namesx0)))
>
>
>
>
> Saludos,
>
> Marcelino
>
>
> El 07/09/2018 a las 8:35, Juan Abasolo escribió:
> > ¡Buenas, listeros!
> >
> > Supongo que lo que planteo es muy básico, pero estoy trabado y
> no lo veo.
> >
> > Tengo una función que da la distancia lingüística ALINE,
> alineR::aline(),
> > pero que no genera matrices.
> >
> > Tengo que hacer matrices de distancias ALINE de unos datos tipo
> esto:
> >
> > A cansado
> > B cansadísimo
> > C cansau
> > D reventado
> > E reventao
> > F NA
> > G canso
> >
> > alineR::aline("cansado", "cansado")
> > # 0
> >
> > Necesito así, as.dist(miresultado)...
> > A B C D ...
> > A 0
> > B 0.2 0
> > C 0.1 0 0
> > D 0.9 0.89 0
> > ...
> >
> > No sé si le puedo explicar a la función dist() o a alguna amiga
> suya que
> > method = "ALINE" quiere decir que use la función `aline()`. O si
> tengo que
> > intentar reinventar la rueda, pero con alineR::aline(x).
> >
> > También capaz que pueda evitar que aparezcan los NA sin mellar
> el trabajo.
> >
> > Gracias por la pacencia.
> >
>
> --
> Marcelino de la Cruz Rot
> Depto. de Biología y Geología
> Física y Química Inorgánica
> Universidad Rey Juan Carlos
> Móstoles España
>
>
>
> --
> Juan Abasolo
>
> Hizkuntzaren eta Literaturaren Didaktika Saila
> Bilboko Hezkuntza Fakultatea
> Euskal Herriko Unibertsitatea
> UPV/EHU
>
> Sarriena auzoa z/g
> 48940 Leioa
> Bizkaia
--
Marcelino de la Cruz Rot
Depto. de Biología y Geología
Física y Química Inorgánica
Universidad Rey Juan Carlos
Móstoles España
Más información sobre la lista de distribución R-help-es