Acerca de… Anuncio de las IV Jornadas de Usuarios de R

Pues eso, os pego el anuncio que han colgado en la lista de usuarios de R.

“Escribo en nombre de los comités organizador y científico de las IV
Jornadas de Usuarios de R para anunciarlas pública y oficialmente.
Tendrán lugar los días 15 y 16 de noviembre en el CREAL
(http://www.creal.cat/), Barcelona y está coorganizadas por el CREAL,
el Grupo de Usuarios de R de Barcelona y la Comunidad R Hispano.

Toda la información necesaria para participar y registrarse está disponible en

http://www.r-es.org/IV+Jornadas

Quiero invitar a todos a acudir, participar y difundir la noticia de
esta nueva edición de las Jornadas de Usuarios de R. Aprovecho también
la ocasión para agradecer la labor de quienes las han hecho posible y
saludar y recordar a quienes colaboraron en las ediciones anteriores.”

Por cierto, podéis suscribiros a la lista aquí.

Más información sobre usuarios de R en español aquí.

jaume.

Acerca de… NA’s, valores perdidos.

Hola

Aun recuerdo como me ilusionó saber que si dentro del paréntesis de la media pones na.rm=T el R pasa de los NA.

> v<-c(1,2,3,NA,4)
> mean(v)
[1] NA
> mean(v,na.rm=T)
[1] 2.5

Por que esto es muy cómodo, de hecho lo puedes meter en tu propia función para la media:


# datos de ejemplo
> coches<-cars
# metamos un NA
> coches[10,1]<-NA
# la media
> apply(coches,MARGIN=2,FUN=mean)
speed  dist
NA 42.98
# nuestra función
> mimedia<-function(x) mean(x, na.rm=TRUE)
> apply(cars,MARGIN=2,FUN=mimedia)
speed  dist
15.40 42.98

Y meter la función mimedia donde te de la gana.
Así podia deshacerme de los puñeteros NA que no sabía muy bien de donde venian ni para que servian.

Claro, con el tiempo uno aprende que los NA dependiendo de donde vengan pueden significar cosas muy distintas y que a veces podemos ignorarlos.
Pero a veces conviene convertirlos en un valor interesante.

coches[is.na(coches)]<-"valorinteresante"

O borrarlos:

coches<-cars
coches[10,1]<-NA
coches.sin.na<-coches[!is.na(coches$speed),]

Esto viene a cuento de esta entrada donde explica como son los NA según de donde vengan. Sabiendo eso podemos trabajar de una forma u otra. Ya que a veces la distribución de los NA puede estar sesgada y entonces no vale borrarlos o ignorarlos.

jaume

Acerca de… listas de especies

Hola.

No se si recordáis aquella entrada en que os describía como hacer que R nos preguntara cunado cuando había encontrado un NA.

Pues hoy, en el Blog de Luis Cayuela, hay una entrada con un problema similar. Él tiene el problema a la hora de determinar, por ejemplo, si los nombres de las especies son correctos o si dos nombres diferentes corresponden a la misma especie.

Es interesante por que además nos ofrece información sobre una iniciativa interesante The Plant List que intenta poner en un solo lugar todos los nombres aceptados de plantas vasculares, con sus sinónimos, autorías, etc.

Espero que os sea útil.

Jaume.

Acerca de… Jornadas de ususarios de R

Hace ya más de una semana que terminaron y creo que es interesante hablar de ellas aquí.

Ya está diponible el libro de resumenes. Está muy bien por que junto al resumen te da la opción de ir a la ponencia.

Hay varias sobre ecología:

Algunas aplicaciones de R en ecología: de la docencia elemental a la investigación avanzada.

Marcelino de la Cruz Rot. Universidad Politécnica de Madrid.

Presentación

Detección de patrones espaciales de biodiversidad de árboles y mamíferos en la Península Ibérica.

Jennifer Morales Barbero, Rafael Francisco García Vázquez y Dolores Ferrer Castán. Área de Ecología, Universidad de Salamanca.

Presentación

Correcciones taxonómicas de grandes bases de datos de forma automatizada.

Luis Cayuela. Universidad Rey Juan Carlos.

Presentación

Además hay algunos sobre supervivencia que se podrían aplicar a algunos estudios ecológicos.

jaume

Acerca de… si es que el R sirve para todo.

En el blog sobre ecología y evolución EBB Flow. Nos han felicitado Halloween con una tarjeta hecha en R.

Os pego el código:


###required libraries
##if you do not have the "fields" and "MBA" libraries, you need this step to install them
install.packages("fields")
install.packages("MBA")
## load libraries
library(fields)
library(MBA)

###data
data<-matrix(c(44.9186,81.0824,46.9512,80.1061,49.187,80.7055,57.9268,80.1493,60.3659
 ,81.34,69.3089,80.1941,78.4553,79.2459,91.8699,70.834,99.7967,55.9047
 ,101.2195,30.9102,96.1381,17.3075,85.5691,7.4235,74.3902,4.2299
 ,61.7886,1.8181,55.4878,1.0059,49.187,0.9811,45.3252,1.7532,37.1951
 ,1.9181,20.3252,7.1666,8.9431,17.1612,4.2683,29.1507,4.2683,50.8042
 ,9.5528,66.3761,18.4959,76.2539,29.065,80.6261 ,38.6179,80.8607
 ,44.9186,81.0824)
 ,ncol=2,byrow=TRUE)
stem<-matrix(c(60.3659,81.34,57.9268,80.1493,49.187,80.7055,46.9512,80.1061,44.9186
 ,81.0824,45.5285,83.6438,47.561,88.1794,44.1057,97.2209,48.7805,99.9952
 ,54.878,87.6176,60.3659,81.34)
 ,ncol=2,byrow=TRUE)
eye<-matrix(c(45.935,46.4407,34.1463,44.8195,36.7886,46.9952,36.382,50.9306,32.3171,53.08
 ,29.065,53.0672,26.0163,49.7086,28.0488,45.1892,20.3252,48.7021,20.1219
 ,55.3942,23.5772,61.1164,30.8942,65.476,32.3171,59.7729,45.935,46.4407)
 ,ncol=2,byrow=TRUE)
eye2<-matrix(c(58.9431,46.6888,65.4472,51.2419,71.748,56.9754,74.3902,65.4504,82.7236
 ,59.7745,84.9593,56.4368,84.7561,48.562,77.439,45.7772,78.8618,50.5072
 ,74.3902,53.6393,69.9186,51.6532,68.6992,47.9083,70.5285,44.9627,58.9431
 ,46.6888)
 ,ncol=2,byrow=TRUE)
mouth<-matrix(c(8.9431,44.7202,23.374,41.2338,30.0813,22.7562,38.2114,38.5363,65.0407
 ,38.445,73.374,22.533,80.2846,40.8673,96.9512,44.673,93.4959,31.8641
 ,84.1463,18.8352,66.2602,9.7097,61.9919,16.1889,59.3496,8.3045,45.5285
 ,8.447,42.8862,16.1137,38.2114,9.4024,22.7642 ,17.4125,11.9919,31.7401
 ,8.9431,44.7202)
 ,ncol=2,byrow=TRUE)
stars<-matrix(c(sample(seq(0,100),80),sample(seq(20,100),80,replace=TRUE)),ncol=2)

###plot
par(bg = "black")
par(mar=c(5,2,4,2))+0.1
plot(data,type="n",xlim=c(0,100),ylim=c(0,100),xaxt="n",yaxt="n",xlab="",ylab="",axes=FALSE)
symbols(x=stars[,1],y=stars[,2]
 ,circles=rep(0.001,nrow(stars))
 ,inches=0.015,bg="white"
 ,xlim=c(0,100),ylim=c(0,100))
col<-runif(nrow(data),min=4,max=7)
datmb<-mba.surf(matrix(cbind(data,col),ncol=3),no.X=200,no.Y=200,extend=FALSE)
image(datmb$xyz,zlim=c(0,10),col=heat.colors(40),add=TRUE)
polygon(stem,col="darkgreen")
polygon(eye,col="yellow")
polygon(eye2,col="yellow")
polygon(mouth,col="yellow")
points(data,type="l")
mtext("Happy Halloween",side=3,col="green3",cex=3.5,font=4)
mtext("from the EEB and Flow",side=1,col="green3",cex=2.5,font=4)

Ale, a destriparlo y a aprender cosas sobre gráficos en R.

No os perdáis el segundo comentario.

jaume

Acerca de… RStudio

Hola

Dicen que rectificar es de sabios. Ya voy por el tercer intermediario (GUI) para R.

Todo empezó con el JGR, necesitaba hacer el uso de R un poco más fácil en linux (vedlo aquí y aquí)

La verdad es que no iba demasiado bien y era un lío trabajar de dos formas diferentes en linux y Windows. Traté de buscar uno que funcionara en ambas plataformas y apareció el RKWard. Va bastante bien pero en windows da algunos problemas a la hora de generar los gráficos en formatos vectoriales. Y el asunto de las actualizaciones tampoco es trivial.

Pero el otro día vi a un colega usando RStudio. Yo no dejaba el RKward por que te marca la sintaxis con colorines y te sugiere a medida que escribes. Pero el RStudio hace eso y mucho más, además funciona en Windows y Linux. Y la cuestión es que va suave, da una sensación de maquina bien engrasada. El tema de las actulizaciones tampoco es automático, pero no va mal, ya os contaré.

Pues eso probad el RStudio.

jaume

Acerca de… hacer que R nos pregunte

Hola,

A veces cuando estamos analizando datos, nos salen resultados raros que nos hacen revisar los dataframes en busca de pequeños errores. Normalmente estos errores son cosas sistemáticas producidas por la importación de los datos, valores perdidos, etc. que se pueden solucionar fácilmente con replace() o cosas así. Pero a veces cada pequeño error necesita que lo revisemos y tomemos una decisión.

Aquí os presento una cosa que he descubierto par enfrentarme a ese problema… bueno, supongo que los erreros añejos lo tiene superado. La cosa es esta, tengo información sobre una serie de especies que aparecen o no en unas parcelas. De otra base de datos he obtenido si dichas especies son anuales o perennes, pero no todas las especies de mi dataframe están en la base de datos, así que me quedan especies con NA. Pero necesito ir especie a especie confirmando si es a o p. Lo que he hecho es esto:

Mis datos:

Spxparc<-data.frame(especie=c(rep("sp1",5),rep("sp2",4),rep("sp3",2),rep("sp4",5),rep("sp6",4))
                   ,parcela=c(c(1:5),c(1:4),c(1,2),c(1:5),c(1:4))
                   ,anuper=c("a","p",NA,"a","p",rep("a",10),NA,NA,NA,NA,NA)
                   )

Lo que quiero es que R vaya de NA en NA y me pregunte:


#para cada fila del df
for(i in c(1:nrow(Spxparc)))
{
  #si en esa fila anuper es NA
  while(is.na(Spxparc$anuper[i]))
  {
    #enseñale al usuario a que especie corresponde
    print(Spxparc$especie[i])
    #pidele al usuario que te diga si esa especie es a o p
    input<-scan(n=1,what="character")
    #escribe lo que te diga el usuario en la tabla
    Spxparc$anuper[i]<-input
  }
}

Esto es todo. Espero que os sea útil.