Hola Carlos: He hecho una pruebas, y tienes razón. La solución de "[" es mejor. Imbuido del lenguaje de SAS, me parecía mejor subset. Lo cambio.
Gracias de nuevo y saludos! On Tue, 7 Jul 2015 13:52:05 +0200 Carlos Ortega <c...@qualityexcellence.es> wrote: > 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 _______________________________________________ R-help-es mailing list R-help-es@r-project.org https://stat.ethz.ch/mailman/listinfo/r-help-es