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