[R-es] Conservar el nombre de la variable entre varias funciones

Griera-yandex griera en yandex.com
Mar Jul 14 11:17:24 CEST 2015


Hola:

Gracias por interesar-te per el problema!

Explico las líneas generales de lo que quiero hacer. La mayor parte de mi trabajo es analizar datos de estudios ajenos. Hasta ahora lo hacia con SAS y tengo una macro  que le paso el nombre del fichero y las variables y la macro realiza, según si la variable es cualitativa o cuantitativa (no afino más el tipo de variable):
- Descriptiva: 
   - Tabla de frecuencias para variables cualitativas.
   - Variables cuantitativas: estadísticos básicos, listado de los 5 casos extremos (máximo y mínimo) y box-plot
- Análisis univariado con variable dependiente cualitativa:
  - Variables independientes cualitativas:
      - Tabla de contingencia con Chi2 i Fisher
      - Odds ratios
  - Variables independientes cuantitativas:
      - Estadísticos básicos según los valores de la variable dependiente.
      - Box-plot para cada categoría de la variable dependiente.
      - Prueba de Kruskal-Wallis
      - Odds ratio
- Análisis univariado con variable dependiente quantitiativa:
  - Variables independientes cualitativas:
      - Estadísticos i bosd plot de la var dependiente para cada categoría de la independiente.
      - Test de Kruskal-Wallis.
  - Variables independientes cuantitativas:
      - Regresión lineal simple con los diagramas de dispersión.

Hace de forma "automática" alguna cosa más, pero no quiero cansarte.

Te envío al mail personal dos pdf con dos ejemplos, un análisis descriptivo y una univariado como variable dependiente cualitativa.

En R estoy haciendo es enviar a una función el nombre de la tabla de datos, las variables que no se han de analizar y el nombre de la variable dependiente si se quiere un análisis univariado:

  La función DESUNI llama a la función DES (análisis descriptivo) y UNI (análisis univariado). Éstas recorren los nombres de las variables de la tabla de datos y según el tipo de variable independiente (numérica o factor) ejecuta la función correspondiente. Adjunto al final como ejemplo las funciones DESUNI y DES.

Con esto se genera una descriptiva básica y un análisis univariado básico que permite conocer las variables del fichero y empezar a comentar con el investigador que análisis realizar. El ahorro de tiempo es considerable.

Espero que se me haya entendido y disculpad esta respuesta tan larga.

Gracias por la ayuda y saludos.

=============================================
DESUNI = function(XDADES,
                  XDROP=NULL,
                  XVD=NULL,
                  XSPV=NULL # Si és una anàlisi de SPV # Pot tenir el valor TRUE
                  )
  {
  # Camí de les funcions
  XCAMIF="~/sys/utils/apps/r/r_funcions/"
  options(digits = 3, OutDec=",", scipen=999)
  ## No existeix VD: descriptiva
  if(is.null(XVD))   # No existeix VD: descriptiva
    {
      cat("\n*** Descriptiva (no existeix variable dependent)\n")
      source(paste(XCAMIF, "des.r", sep=""))
      DES(XDADES=XDADES, XDROP=XDROP, XCAMIF=XCAMIF)
    }  
  ## Existeis VD: anàlisi univariat
  else               # Existeis VD: anàlisi univariat
    {
      source(paste(XCAMIF, "uni.r", sep=""))
      UNI(XDADES=XDADES, XDROP=XDROP, XVD=XVD, XSPV=XSPV, XCAMIF=XCAMIF)
    }
  }
=============================================
Funció DES:
DES = function(XDADES,  XDROP=NULL, XCAMIF)
  {
    ifelse(is.null(XDROP), DADES_S <- XDADES, DADES_S <- XDADES[, setdiff(names(XDADES), XDROP) ])
    attach(DADES_S, warn.conflicts = F)
    XVARLLI=names(DADES_S)
    for (XVARNOM in names(DADES_S))
      {
        if(is.numeric(get(XVARNOM)))
          {
            source(paste(XCAMIF, "des_quanti.r", sep=""))
            DES_QUANTI (XVARNOM)
          }
        else if(is.factor(get(XVARNOM)))
          {
            source(paste(XCAMIF, "des_quali.r", sep=""))
            DES_QUALI (XVARNOM)
          }
      else
        {
          cat("La variable ", XVARNOM, "no és de cap dels tipus coneguts", "\n")
        } 
      }    
    detach(DADES_S)
  }
=============================================


On Mon, 13 Jul 2015 20:56:59 +0200
Carlos Ortega <cof en qualityexcellence.es> wrote:

> Hola,
> 
> ¿Qué tipo de análisis quieres hacer?
> Porque de "fábrica" R ya viene con múltiples funciones para el cálculo de
> diferentes estadísticas descriptivas para todo tipo de variables.
> 
> Saludos,
> Carlos Ortega
> www.qualityexcellence.es
> 
> El 13 de julio de 2015, 15:33, Griera <griera en yandex.com> escribió:
> 
> > Hola:
> >
> > Con esto del R me da la impresión que avanzo un paso y retrocedo dos!
> >
> > El caso es que tengo una "cascada de funciones", para realizar un análisis
> > descriptivo "automático" en función del tipo de variable. Y en los
> > resultados, en lugar de aparecer el nombre de la variable, aparece el
> > nombre del argumento. Esto ocurre tanto si utilizo o no la función get().
> >
> > Un ejemplo resumen reproducible:
> >
> > =============================
> > # Con la función get()
> > A <- function (XVD, XVI, XDATOS)
> >   {
> >     attach(XDATOS)
> >     B(XVD, XVI)
> >     detach(XDATOS)
> >   }
> >
> > B <- function (XVD, XVI)
> >   {
> >     TBL = xtabs(~get(XVD) + get(XVI))
> >     print(TBL)
> >     print(summary(TBL))
> >   }
> >
> >
> > DATOS <- data.frame(SE=c("M", "H", "M", "M", "H"),
> >                     EDAD=c(50, 60, 20, 18, 30),
> >                     GRP=c("B", "B", "A", "A", "B"))
> > A("GRP", "SE", DATOS)
> >
> > La tabla que imprime és:
> >
> >         get(XVI)
> > get(XVD) H M
> >        A 0 2
> >        B 2 1
> >
> >
> >
> > Sin la función get():
> > =============================
> > # Sin la función get()
> > A <- function (XVD, XVI, XDATOS)
> >   {
> >     attach(XDATOS)
> >     B(XVD, XVI)
> >     detach(XDATOS)
> >   }
> >
> > B <- function (XVD, XVI)
> >   {
> >     TBL = xtabs(~XVD + XVI)
> >     print(TBL)
> >     print(summary(TBL))
> >   }
> > A(GRP, SE, DATOS)
> >
> > La tabla que imprime és:
> > > A(GRP, SE, DATOS)
> >    XVI
> > XVD H M
> >   A 0 2
> >   B 2 1
> > =============================
> >
> >
> > Alguien puede orienter-me como solucionarlo y que en los resultados
> > aperzca el nombre de la variable en lugar del argumento de la función?
> >
> > Muchas gracias y saludos.
> >
> > _______________________________________________
> > 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



Más información sobre la lista de distribución R-help-es