Foro de discusión y soporte para usuarios de R

Un foro abierto a todos los temas relacionados con R que quiera.
Nota: Una url estable a este foro es https://knuth.uca.es/R-foro.

Bucles en R

de Nerea Valcarcel -
Hola a todos,

estoy intentando escribir un programa para procesar los datos de un equipo que acabamos de comprar. Como no sabía programar en ningun lenguaje pero había dado un cursito de R me animé a hacerlo con él, pero soy muy novata y estoy bastante perdida. Hasta ahora he podido "apañarme" haciendo cosas básicas a través de R-commander y modificando el código según me interesaba. Ahora sin embargo he llegado a un punto en que no sé seguir. Tengo dos problemas:

- Una de las variables (llamemosla B) algunas veces aparece con NA por fallos del equipo. Yo necesito calcular una nueva variable (C) diviendo la variable A entre la variable B. El problema es que cuando la variable B tiene NA, la variable C también, claro está y yo necesito que C sea siempre mayor de 0. Lo que creía que tenía que hacer es algo del tipo "if then else" al crear la nueva variable, de tal forma que si B es positiva me haga el cálculo necesario y si no, tome el valor de la celda anterior. He hecho numerosos intentos y me imagino que no doy con la sintaxis adecuada, porque no he sido capaz de conseguirlo.

- Por otra parte, tengo una variable con la siguiente estructura:

Variable D

32869
291
327
401
186
33251
874
215

El equipo es un contador de partículas láser, y cada vez que la variable D toma un valor superior a 32768, esto indica que es una nueva partícula. Es decir, necesito que el programa identifique cada partícula y sume los valores de D hasta el siguiente valor mayor de 32768. Llevo toda la mañana leyendo manuales, foros y demás y no consigo dar con el método más adecuado. He pensado en for, while y luego he visto que muchas veces se pueden simplificar estos bucles con apply. En definitiva, no he conseguido usar ninguno de ellos y estoy más liada que al principio.

No sé si podrán ayudarme, pero lo agradezco de antemano.

Un saludo

Nerea

Problemas con la actualización de R

de Fernando Archuby -

Acabo de instalar la versión 3.5.1. Me encuentro imposibilitado de instalar paquetes o actualizar lo paquetes instalados debido a que la carpeta library aparece como no modificable. Desde propiedades de la carpeta intento arreglar eso pero luego el programa repite el error y la carpeta aparece nuevamente protegida.

¿Alguno tiene alguna solución?

Muchas gracias! (abajo pegué el texto del aviso de error)

Warning in install.packages(NULL, .libPaths()[1L], dependencies = NA, type = type) :
  'lib = "C:/Program Files/R/R-3.5.1/library"' is not writable

Prediccion de un GLM

de Erick Daniel Ruvalcaba -

Buenas a todos, realicé un GLM con 9 variables y con el stepwise terminé con un modelo de 4 de esas nueve variables. y estoy intentando graficar la predicción con todas las combinaciones de las variables mas importantes, es decir, hacer algo como un "meshgrid" en matlab. en el que me haga una matriz en la que todas sus columnas sean iguales, que después pueda combinar con una en la que todos sus renglones son iguales y asi tener mis coordenadas (x,y), y hacer un gráfico de color, al que después le encime mi variable respuesta con símbolos proporcionales a su abundancia (es un GLM de variables oceanográficas y abundancia de plancton). algo así como esto:

Esto es un ejemplo de lo que intento hacer, soy usuario de matlab, esto es solo una simulación

el problema parte desde que no puedo hacer dichas matrices de las coordenadas (x,y), a mi modo lo hice desde matlab y despues importé las tablas, muy lento, pero listo.


ahora para hacer la predicción con la función 'predict' necesito  hacer un objeto que tenga ambas matrices con sus nombres, para lo que utilicé la  función 'stack' pero en lugar de hacerme ese nuevo objeto me hace un vector con los datos de solo una de las variables, o sea ni siquiera me pone las dos que necesito.

no sé si logré darme a entender. 

Ayuda, con datos de matrix

de yordi Tamayo -
Hola! Quisiera saber si alguien me puede ayudar con lo siguiente.


En la imagen muestro una matrix en R, la idea pues es observar los nombres de la primera y notar que hay nombres repetidos como es el caso de  MAPK1. Estoy en busca de una función o forma que me una las columnas con los nombres iguales y ademas calcule los valores medios de las columnas de números para ese nombre.


Alguien me ayuda?  


Imagen1

Ayuda ejercicios en R

de Javier Fernández -

Buenos días,

soy nuevo en el uso de la herramienta R, y quería saber si me pueden ayudar a solucionar esta tarea práctica:

  1. Generar una matriz de dimensiones 3 * 5 llena de ceros de 4 maneras diferentes.
  2. Utilizando la función array, crear un array tridimensional 4*4*4, llenándolo con los números del 1 al 64. Hacer una subselección de los índices 2 y 4 de la primera dimensión y 1 y 3 de la tercera. Mirar las dimensiones del nuevo array. Convertir el resultado de esta subselección en un vector, y después construir con ese mismo vector una matriz 4 * 4, llenándola por filas.
  3. Utilizando la matriz 4 * 4 del problema anterior, invertir el orden de sus columnas y transponerla. A todos superiores a 30 de esta nueva matriz cambiarles el signo. Hacer el producto matricial de la matriz original por la que acabamos de obtener.

Y la siguiente:

  1. Crear una lista donde guardaremos información de 3 personas. La lista tendrá 4 componentes, que serán vectores: nombre (carácter), edad (numérico), sexo (factor, H –M), y una variable booleana que indica si esa persona ya trabaja.
  2. Crear un data frame que guarde la misma información que la lista anterior. Primero crearlo partiendo de cero y después aprovechar que ya tenéis la lista para crearlo de una manera más directa. ¿Hay problemas al transformar un objeto lista un objeto data frame? ¿Hace falta especificar que el sexo es una variable factor? ¿De qué tipo es la variable "nombre"? Con la ayuda de la función as.character transformarla en un vector de caracteres.
  3. Añadirle un nuevo vector a la lista que indique la profesión de cada persona. Hacer lo mismo con el data frame. Hacerlo todo sin rehacer ni la lista ni el data frame de nuevo. Aseguraros de que la nueva información tenga su name correspondiente.
  4. Hacer un attach del data frame. Comprobar que sus columnas son accesibles sin hacer mención explícita al propio data.frame. Descargarlo con detach.
  5. Practicar un poco con la lista y el data.frame que tenéis creados. ¿Podéis acceder al data frame con índices numéricos como si fuera una matriz? ¿Sabéis hacer una subselección del data frame? ¿Y de la lista?
La verdad que estoy bastante atascado, y necesito ayuda para sacar las tareas adelanteGracias por adelantado

Utilizacion de operadores logicos.

de David Tarin Bernad -

Buenas tardes,


Estoy intentando programar, holgura en en R, de +, - 2 segundos.

Imaginemos una matriz A:

27/06/07 9:17:00

Una matriz B:

27/06/07 9:16:59

Quiero que todo valor que sea superior o inferior a dos segundos en A, B me arroje un TRUE.

Yo estaba diseñando algo asi:

for (i in 1:l) 

  for(m in 1:n)

   {if (C[i,2]+0.00002>=P[m,2] & C[i,2]-0.00002<=P[m,2]){bien[i,m]<-paste(";",i,";", m)}else{}}

Asi 'bien' me devuelve a fecha de una matriz A (i), y la fecha de la matriz B (m).



Comparación de filas

de David Tarin Bernad -

Buenos dias,


Como podria hacer para comparar una matrix (nx3) y y otra (mx3), donde obtuviese las filas que son coincidentes en ambas, es decir, aquellas filas en las que son iguales para ambas matrices.


He utilizado %in% pero no me llega a servir puesto que me coge lo coincidente para topdo los datos y hay un momento en el que no lo puedo seguir reduciendo.


Un saludo.