Griera
2015-Jul-06 19:59 UTC
[R-es] Pasar un listado de variables como argumento de una función
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!
Carlos Ortega
2015-Jul-06 22:26 UTC
[R-es] Pasar un listado de variables como argumento de una función
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
[[alternative HTML version deleted]]
Griera
2015-Jul-07 09:16 UTC
[R-es] Pasar un listado de variables como argumento de una función
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