Hola, Pero con lo que quieres hacer, estás definiendo el objetivo de la función "subset()". Otra cosa es que no te funcione alguno de los casos.
A mí, el primer caso de "Excluir", me funciona: > 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) [1] "SE" "HTA" Para el caso de "Incluir", lo que definies como "c(SE, GRP_S:HTA)", ¿qué sentido tiene?. Estás definiendo una secuencia "GRP_S:HTA" cuando ":" se utiliza en el contexto que quieres como secuencia entre dos números. Sí, los ":" también se utilizan como factores, pero para indicar una interacción de un modelo, que no es tu caso. Cometiendo un "pecadillo" con la función "attach()" , porque de otra forma SE, EDAD y GRP_S no se entienden como variales en el entorno, mira el resultado de lo que obtienes: > attach(DATOS) > c(SE, EDAD:GRP_S) [1] 2 1 2 2 1 50 49 48 47 46 45 44 43 42 41 40 39 38 37 36 35 34 33 32 31 30 29 28 27 26 25 24 23 22 21 20 [37] 19 18 17 16 15 14 13 12 11 10 9 8 7 6 5 4 3 Warning messages: 1: In EDAD:GRP_S : numerical expression has 5 elements: only the first used 2: In EDAD:GRP_S : numerical expression has 5 elements: only the first used Creo que para la elección de columnas, sigue siendo más recomendable el uso de "[" que de "subset()", en esa dirección va lo que te proponía. Y el caso de "Incluir", es el complementario de "Excluir", por lo que con esa solución puedes funcionar para cualquier caso. Mira estas referencias adicionales: http://stackoverflow.com/questions/9860090/in-r-why-is-better-than-subset http://adv-r.had.co.nz/Subsetting.html#subsetting-operators Saludos, Carlos Ortega www.qualityexcellence.es El 7 de julio de 2015, 11:16, Griera <gri...@yandex.com> escribió: > 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 <c...@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 <gri...@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@r-project.org > > > https://stat.ethz.ch/mailman/listinfo/r-help-es > > > > > > > > > > > -- > > Saludos, > > Carlos Ortega > > www.qualityexcellence.es > -- Saludos, Carlos Ortega www.qualityexcellence.es [[alternative HTML version deleted]] _______________________________________________ R-help-es mailing list R-help-es@r-project.org https://stat.ethz.ch/mailman/listinfo/r-help-es