[R-es] Construir matriz de distancias
Juan Abasolo
ju@n@@b@@olo @ending from ehu@eu@
Sab Sep 8 13:47:22 CEST 2018
Es algo más mágico que eso, aparentemente.
Seguí todos tus pasos y, lo comentado, R se cae.
Actualicé tooodos los paquetes y RStudio, y R se cae.
Probé con mis datos (codificados según IPA... masomeno) y... FUNCIONA!!!
Ahora tengo que ver si sirve para lo que me propongo... aprendiendo a
trabajar con dendogramas y clusters, no para sorpresa tuya ;-)
Muchísimas gracias.
Hau idatzi du Marcelino de la Cruz Rot (marcelino.delacruz using urjc.es)
erabiltzaileak (2018 ira. 7, or. (14:13)):
> 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
>
>
--
Juan Abasolo
Hizkuntzaren eta Literaturaren Didaktika Saila
Bilboko Hezkuntza Fakultatea
Euskal Herriko Unibertsitatea
UPV/EHU
Sarriena auzoa z/g
48940 Leioa
Bizkaia
[[alternative HTML version deleted]]
Más información sobre la lista de distribución R-help-es