[R-es] Pasar un listado de variables como argumento de una función

Griera griera en yandex.com
Mar Jul 7 11:16:52 CEST 2015


Hola:

Gracias de nuevo por la ayuda!

La solución, como no, funciona. Pero yo quería alguna cosa más flexible y universal que le pudiera pasar como parámetro diferentes opciones de incluir i excluir variables. Si estuviera fuera de la función seria:

=====================
DATOS <- data.frame(SE    = c("M", "H", "M", "M", "H"),
                    EDAD  = c(50,  60,  20,  18,  30),
                    GRP_S = c("B", "0", "B", "A", "B"),
                    HTA   = c("N", "S", "N", "N", "N"))
# Excluir
DATOS_S <- subset(DATOS, select = -c(EDAD, GRP_S))
names(DATOS_S)
DATOS_S <- subset(DATOS, select = -c(SE, EDAD:GRP_S))
names(DATOS_S)
# Incluir
DATOS_S <- subset(DATOS, select = c(SE, GRP_S:HTA))
names(DATOS_S)
=====================

Pero cuando le paso a la función -c(EDAD, GRP_S)) o c(SE, GRP_S:HTA)), no funciona. Existe alguna solución que pueda incorporar esta flexibilidad?

Gracias Carlos y saludos. 


On Tue, 7 Jul 2015 00:26:54 +0200
Carlos Ortega <cof en qualityexcellence.es> wrote:

> Hola,
> 
> Puedes hacerlo de esta otra forma:
> 
> #-----------------
> DES = function(XDATOS, XDROP) {
>   #print(names(XDATOS))
>   #print(XDROP)
>   DATOS_S <- XDATOS[, setdiff(names(XDATOS), XDROP) ]
>   return(DATOS_S)
> }
> 
> DES(DATOS, c("EDAD", "GRP_S"))
> #-----------------
> 
> 
> Saludos,
> Carlos Ortega
> www.qualityexcellence.es
> 
> 
> El 6 de julio de 2015, 21:59, Griera <griera en yandex.com> escribió:
> 
> > Hola:
> >
> > Quiero que una función realice una serie de cálculos pero eliminando las
> > variables que no interesan (diferentes según e fichero a analizar). Intento
> > pasar esta lista como argumento con un c("VAR1", "VAR2", etc), pero no lo
> > consigo. Un ejemplo seria:
> >
> > DATOS <- data.frame(SE=c("M", "H", "M", "M", "H"),
> >                     EDAD=c(50, 60, 20, 18, 30),
> >                     GRP_S=c("B", "0", "B", "A", "B"))
> > DES = function(XDATOS, XDROP=F)
> >         {
> >         print(names(XDATOS))
> >         DATOS_S <- subset(XDATOS, select = -c(XDROP))
> >         }
> >
> > Sin "" da el error:
> >
> > > DES(DATOS, c(EDAD, GRP_S))
> > [1] "SE"    "EDAD"  "GRP_S"
> > Error in print(XDROP) : object 'EDAD' not found
> >
> > Con "" da el error:
> >
> > > DES(DATOS, c("EDAD", "GRP_S"))
> > [1] "SE"    "EDAD"  "GRP_S"
> > [1] "EDAD"  "GRP_S"
> > Error in -c(XDROP) : invalid argument to unary operator
> >
> > Alguien me puede echar una mano. Estoy bien perdido.
> >
> > 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