Re: [R-es] Conservar el nombre de la variable entre varias funciones
Hola: Gracias por interesar-te per el problema! Explico las líneas generales de lo que quiero hacer. La mayor parte de mi trabajo es analizar datos de estudios ajenos. Hasta ahora lo hacia con SAS y tengo una macro que le paso el nombre del fichero y las variables y la macro realiza, según si la variable es cualitativa o cuantitativa (no afino más el tipo de variable): - Descriptiva: - Tabla de frecuencias para variables cualitativas. - Variables cuantitativas: estadísticos básicos, listado de los 5 casos extremos (máximo y mínimo) y box-plot - Análisis univariado con variable dependiente cualitativa: - Variables independientes cualitativas: - Tabla de contingencia con Chi2 i Fisher - Odds ratios - Variables independientes cuantitativas: - Estadísticos básicos según los valores de la variable dependiente. - Box-plot para cada categoría de la variable dependiente. - Prueba de Kruskal-Wallis - Odds ratio - Análisis univariado con variable dependiente quantitiativa: - Variables independientes cualitativas: - Estadísticos i bosd plot de la var dependiente para cada categoría de la independiente. - Test de Kruskal-Wallis. - Variables independientes cuantitativas: - Regresión lineal simple con los diagramas de dispersión. Hace de forma automática alguna cosa más, pero no quiero cansarte. Te envío al mail personal dos pdf con dos ejemplos, un análisis descriptivo y una univariado como variable dependiente cualitativa. En R estoy haciendo es enviar a una función el nombre de la tabla de datos, las variables que no se han de analizar y el nombre de la variable dependiente si se quiere un análisis univariado: La función DESUNI llama a la función DES (análisis descriptivo) y UNI (análisis univariado). Éstas recorren los nombres de las variables de la tabla de datos y según el tipo de variable independiente (numérica o factor) ejecuta la función correspondiente. Adjunto al final como ejemplo las funciones DESUNI y DES. Con esto se genera una descriptiva básica y un análisis univariado básico que permite conocer las variables del fichero y empezar a comentar con el investigador que análisis realizar. El ahorro de tiempo es considerable. Espero que se me haya entendido y disculpad esta respuesta tan larga. Gracias por la ayuda y saludos. = DESUNI = function(XDADES, XDROP=NULL, XVD=NULL, XSPV=NULL # Si és una anàlisi de SPV # Pot tenir el valor TRUE ) { # Camí de les funcions XCAMIF=~/sys/utils/apps/r/r_funcions/ options(digits = 3, OutDec=,, scipen=999) ## No existeix VD: descriptiva if(is.null(XVD)) # No existeix VD: descriptiva { cat(\n*** Descriptiva (no existeix variable dependent)\n) source(paste(XCAMIF, des.r, sep=)) DES(XDADES=XDADES, XDROP=XDROP, XCAMIF=XCAMIF) } ## Existeis VD: anàlisi univariat else # Existeis VD: anàlisi univariat { source(paste(XCAMIF, uni.r, sep=)) UNI(XDADES=XDADES, XDROP=XDROP, XVD=XVD, XSPV=XSPV, XCAMIF=XCAMIF) } } = Funció DES: DES = function(XDADES, XDROP=NULL, XCAMIF) { ifelse(is.null(XDROP), DADES_S - XDADES, DADES_S - XDADES[, setdiff(names(XDADES), XDROP) ]) attach(DADES_S, warn.conflicts = F) XVARLLI=names(DADES_S) for (XVARNOM in names(DADES_S)) { if(is.numeric(get(XVARNOM))) { source(paste(XCAMIF, des_quanti.r, sep=)) DES_QUANTI (XVARNOM) } else if(is.factor(get(XVARNOM))) { source(paste(XCAMIF, des_quali.r, sep=)) DES_QUALI (XVARNOM) } else { cat(La variable , XVARNOM, no és de cap dels tipus coneguts, \n) } } detach(DADES_S) } = On Mon, 13 Jul 2015 20:56:59 +0200 Carlos Ortega c...@qualityexcellence.es wrote: Hola, ¿Qué tipo de análisis quieres hacer? Porque de fábrica R ya viene con múltiples funciones para el cálculo de diferentes estadísticas descriptivas para todo tipo de variables. Saludos, Carlos Ortega www.qualityexcellence.es El 13 de julio de 2015, 15:33, Griera gri...@yandex.com escribió: Hola: Con esto del R me da la impresión que avanzo un paso y retrocedo dos! El caso es que tengo una cascada de funciones, para realizar un análisis descriptivo automático en función del tipo de variable. Y en los resultados, en lugar de aparecer el nombre de la variable, aparece el nombre del argumento. Esto ocurre tanto si utilizo o no la función get(). Un ejemplo resumen reproducible: = # Con la función get() A - function (XVD, XVI, XDATOS) { attach(XDATOS) B(XVD, XVI) detach(XDATOS) } B - function (XVD, XVI) { TBL
Re: [R-es] Crear datos aleatorios con restriciones
Genial Carlos! Tu codigo produce lo que quiero! Estoy tratando de entender cada paso y hacer algunos cambios. Mi problema es con como usar `str_plit_fixed`. Con tu codigo tengo eso: separoPairs - as.data.frame(str_split_fixed(AllpairsTmp, , 6)) head(separoPairs) V1 V2 V3 V4 V5 V6 1 e1 g1 c1 e2 g1 c1 2 e1 g1 c1 e3 g1 c1 3 e1 g1 c1 e4 g1 c1 4 e1 g1 c1 e5 g1 c1 5 e1 g1 c1 e6 g1 c1 6 e1 g1 c1 e7 g1 c1 V1 y V4 son el nombre de las escuelas, V2 y V5 del grado y V3 y V6 de la division. Yo hice unos cambios para tener datos un poco mas complejos, pero como resultado inintencional no puedo producir `separoPairs` Esto es lo que mi codigo produce: head(separoPairs) V1 V2 V3V4 V5 V6 1 Aslamy School 3 grade A Maruyama School 3 grade A 2 Aslamy School 3 grade A Smith School 3 grade A 3 Aslamy School 3 grade A Linares School 3 grade A 4 Aslamy School 3 grade A Dieyleh School 3 grade A 5 Aslamy School 3 grade A Hernandez School 3 grade A 6 Aslamy School 3 grade A Padgett School 3 grade A Se puede arreglar? Este es mi codigo library(dplyr) library(randomNames) library(geosphere) set.seed(7142015) # Define Parameters n.Schools - 20 first.grade-3 last.grade-5 n.Grades -last.grade-first.grade+1 n.Classrooms - 4 n.Teachers - (n.Schools*n.Grades*n.Classrooms)/2 #Two classrooms per teacher # Define Random names function: gen.names - function(n, which.names = both, name.order = last.first){ names - unique(randomNames(n=n, which.names = which.names, name.order = name.order)) need - n - length(names) while(need0){ names - unique(c(randomNames(n=need, which.names = which.names, name.order = name.order), names)) need - n - length(names) } return(names) } # Generate n.Schools names gen.schools - function(n.schools) { School.ID - paste0(gen.names(n = n.schools, which.names = last), ' School') School.long - rnorm(n = n.schools, mean = 21.7672, sd = 0.025) School.lat - rnorm(n = n.schools, mean = 58.8471, sd = 0.025) School.RE - rnorm(n = n.schools, mean = 0, sd = 1) Schools - data.frame(School.ID, School.lat, School.long, School.RE) %% mutate(School.ID = as.character(School.ID)) %% rowwise() %% mutate (School.distance = distHaversine( p1 = c(School.long, School.lat), p2 = c(21.7672, 58.8471), r = 3961 )) return(Schools) } Schools - gen.schools(n.schools = n.Schools) # Generate Grades Grades - c(first.grade:last.grade) # Generate n.Classrooms Classrooms - LETTERS[1:n.Classrooms] # Group schools and grades SchGr - outer(Schools$School.ID, Grades, 'grade', FUN=paste) # Group SchGr and Classrooms SchGrClss - outer(SchGr, Classrooms, FUN=paste) # These are the combination of School-Grades-Classroom SchGrClssTmp - as.matrix(SchGrClss, ncol=1, nrow=length(SchGrClss) ) SchGrClssEnd - as.data.frame(SchGrClssTmp) # Assign n.Teachers (2 classroom in a given school-grade) Allpairs - as.data.frame(t(combn(SchGrClssTmp, 2))) AllpairsTmp - paste(Allpairs$V1, Allpairs$V2, sep= ) library(stringr) separoPairs - as.data.frame(str_split_fixed(AllpairsTmp, , 6)) head(separoPairs) Muchas gracias! Estoy aprendiendo un monto gracias a vos! Ignacio On Tue, Jul 14, 2015 at 3:31 AM Carlos Ortega c...@qualityexcellence.es wrote: OK. Bueno, para esa última parte para tener un data.frame con toda la información, ya filtrada y con los datos de los profesores puedes hacer esto: #-- #Si a los validPairs tengo que asignar T profesores t - 10 teachers - data.frame( Name=sample(paste(Prof_,1:t, sep=),t) ,Speciality=sample(paste(Spec_,1:t, sep=),t) ,Age=sample(25:60,t) ) placesEnd - validPairs[sample(1:nrow(validPairs), t), ] row.names(placesEnd) - NULL placesEndRed - placesEnd[,c(1,2,3,6)] names(placesEndRed) - c(School, Grade, Class_1, Class_2) endAssig - cbind.data.frame(placesEndRed, teachers) endAssig #-- Que produce este tipo de resultado: endAssig School Grade Class_1 Class_2Name Speciality Age 1 e11g2 c3 c18 Prof_2 Spec_5 39 2 e11g2 c5 c16 Prof_8 Spec_1 49 3 e12g1 c3 c17 Prof_1Spec_10 36 4 e2g2 c15 c17 Prof_10 Spec_9 29 5 e1g3 c9 c15 Prof_3 Spec_6 55 6 e6g3 c2 c18 Prof_6 Spec_8 42 7 e17g2 c9 c14 Prof_4 Spec_3 27 8 e18g3 c2 c12 Prof_7 Spec_2 53 9 e13g1 c10 c20 Prof_9 Spec_4 58 10e18g2 c4 c19 Prof_5 Spec_7 59 Saludos, Carlos Ortega www.qualityexcellence.es El 14 de julio de 2015, 1:00, Ignacio Martinez ignaci...@gmail.com escribió: Perdon por no se lo suficientemente claro :( Tu codigo produce `validPairs` que tiene 7 variables y 360 observaciones. Donde
Re: [R-es] Crear datos aleatorios con restriciones
Este codigo resuelve mi problema. Estoy usando `str_split` y como separador '- '. Tambien tengo que usar 'trimws'. Supongo que se podria limpiar el codigo para hacerlo mas eficiente, pero todavia no se me ocurrio como. *Muchas gracias Carlos!* library(dplyr) library(randomNames) library(geosphere) set.seed(7142015) # Define Parameters n.Schools - 20 first.grade-3 last.grade-5 n.Grades -last.grade-first.grade+1 n.Classrooms - 4 n.Teachers - (n.Schools*n.Grades*n.Classrooms)/2 #Two classrooms per teacher # Define Random names function: gen.names - function(n, which.names = both, name.order = last.first){ names - unique(randomNames(n=n, which.names = which.names, name.order = name.order)) need - n - length(names) while(need0){ names - unique(c(randomNames(n=need, which.names = which.names, name.order = name.order), names)) need - n - length(names) } return(names) } # Generate n.Schools names gen.schools - function(n.schools) { School.ID - paste0(gen.names(n = n.schools, which.names = last), ' School') School.long - rnorm(n = n.schools, mean = 21.7672, sd = 0.025) School.lat - rnorm(n = n.schools, mean = 58.8471, sd = 0.025) School.RE - rnorm(n = n.schools, mean = 0, sd = 1) Schools - data.frame(School.ID, School.lat, School.long, School.RE) %% mutate(School.ID = as.character(School.ID)) %% rowwise() %% mutate (School.distance = distHaversine( p1 = c(School.long, School.lat), p2 = c(21.7672, 58.8471), r = 3961 )) return(Schools) } Schools - gen.schools(n.schools = n.Schools) # Generate Grades Grades - c(first.grade:last.grade) # Generate n.Classrooms Classrooms - LETTERS[1:n.Classrooms] # Group schools and grades SchGr - outer(paste0(Schools$School.ID, '-'), paste0(Grades, '-'), FUN=paste) #head(SchGr) # Group SchGr and Classrooms SchGrClss - outer(SchGr, paste0(Classrooms, '-'), FUN=paste) #head(SchGrClss) # These are the combination of School-Grades-Classroom SchGrClssTmp - as.matrix(SchGrClss, ncol=1, nrow=length(SchGrClss) ) SchGrClssEnd - as.data.frame(SchGrClssTmp) # Assign n.Teachers (2 classroom in a given school-grade) Allpairs - as.data.frame(t(combn(SchGrClssTmp, 2))) AllpairsTmp - paste(Allpairs$V1, Allpairs$V2, sep= ) library(stringr) separoPairs - as.data.frame(str_split(string = AllpairsTmp, pattern = -)) separoPairs - as.data.frame(t(separoPairs)) row.names(separoPairs) - NULL separoPairs - separoPairs %% select(-V7) %% #Drops empty column mutate(V1=as.character(V1), V4=as.character(V4), V2=as.numeric(V2), V5=as.numeric(V5)) %% mutate(V4 = trimws(V4, which = both)) separoPairs[120,]$V4 #Only the rows with V1=V4 and V2=V5 are valid validPairs - separoPairs %% filter(V1==V4 V2==V5) %% select(V1, V2, V3, V6) # Generate n.Teachers gen.teachers - function(n.teachers){ Teacher.ID - gen.names(n = n.teachers, name.order = last.first) Teacher.exp - runif(n = n.teachers, min = 1, max = 30) Teacher.Other - sample(c(0,1), replace = T, prob = c(0.5, 0.5), size = n.teachers) Teacher.RE - rnorm(n = n.teachers, mean = 0, sd = 1) Teachers - data.frame(Teacher.ID, Teacher.exp, Teacher.Other, Teacher.RE) return(Teachers) } Teachers - gen.teachers(n.teachers = n.Teachers) %% mutate(Teacher.ID = as.character(Teacher.ID)) # Randomly assign n.Teachers teachers to the ValidPairs TmpAssignments - validPairs[sample(1:nrow(validPairs), n.Teachers), ] Assignments - cbind.data.frame(Teachers$Teacher.ID, TmpAssignments) names(Assignments) - c(Teacher.ID, School.ID, Grade, Class_1, Class_2) # Tidy Data library(tidyr) TeacherClassroom - Assignments %% gather(x, Classroom, Class_1,Class_2) %% select(-x) %% mutate(Teacher.ID = as.character(Teacher.ID)) # Merge DF_Classrooms - TeacherClassroom %% full_join(Teachers, by=Teacher.ID) %% full_join(Schools, by=School.ID) On Tue, Jul 14, 2015 at 10:35 AM Ignacio Martinez ignaci...@gmail.com wrote: Genial Carlos! Tu codigo produce lo que quiero! Estoy tratando de entender cada paso y hacer algunos cambios. Mi problema es con como usar `str_plit_fixed`. Con tu codigo tengo eso: separoPairs - as.data.frame(str_split_fixed(AllpairsTmp, , 6)) head(separoPairs) V1 V2 V3 V4 V5 V6 1 e1 g1 c1 e2 g1 c1 2 e1 g1 c1 e3 g1 c1 3 e1 g1 c1 e4 g1 c1 4 e1 g1 c1 e5 g1 c1 5 e1 g1 c1 e6 g1 c1 6 e1 g1 c1 e7 g1 c1 V1 y V4 son el nombre de las escuelas, V2 y V5 del grado y V3 y V6 de la division. Yo hice unos cambios para tener datos un poco mas complejos, pero como resultado inintencional no puedo producir `separoPairs` Esto es lo que mi codigo produce: head(separoPairs) V1 V2 V3V4 V5 V6 1 Aslamy School 3 grade A Maruyama School 3 grade A 2 Aslamy School 3 grade A Smith School 3 grade A 3 Aslamy School 3 grade A Linares School 3 grade A 4 Aslamy School 3 grade A Dieyleh School 3 grade A 5 Aslamy School 3 grade A Hernandez School 3 grade A 6 Aslamy School 3 grade A Padgett School 3 grade A Se puede
[R-es] Manejo de valores perdidos usando predict con CHAID
Hola Estoy tratando de aplicar probabilidades mediante predict a una base de prueba y no consigo manejar los valores perdidos. No tengo problemas en la generación de las probabilidades, el comando es: #genera las probabilidades en prueba prob.P.T1 - predict(chaid2.T1, pruebaT1, type=prob) El data frame 'pruebaT1' tiene 33527 registros La matriz 'prob.P.T1' tiene 66724 elementos, o sea 33362 registros. Esto me dice que hay algunos casos para los cuales no fué capaz de establecer la probabilidad. Esperaba esa situación. El problema es cuando trato de unir las probabilidades desde la matriz al data frame. El comando: pruebaT1$prob.T1-prob.P.T1[,2] Me da el siguiente error Error in `$-.data.frame`(`*tmp*`, prob.T1, value = c(0.42910447761194, : replacement has 33362 rows, data has 33527 El comando prueba.T1-merge(pruebaT1, prob.P.T1[,2],by=row.names, all.x = TRUE) No da error, pero no estoy seguro que la unión por el número de fila sea correcto. Estuve inspeccionando la matriz resultante del predict y no veo saltos en la numeración de las filas Para poner un ejemplo, Digamos que en mi dataframe 'pruebaT1´tengo lo siguiente RowN Var1 Var2 1 a 1 2 b 2 3 a 3 4 b 4 5 a 1 6 b 7 a 3 8 b 4 9 a 1 10 b 2 Cuando aplico la función predict a estos datos obtengo solamente 9 filas, lo cual es correcto. Pero cuando las veo con el comando: view(prob.T1) las filas están numeradas de 1 a 9... Eso me lleva a preguntarme si el comando merge es el mejor para estos casos Para que quede claro, lo que quiero que ocurra es lo siguiente: RowN Var1 Var2 prob.T1 1 a 1 0.03 2 b 2 0.05 3 a 3 0.06 4 b 4 0.03 5 a 1 0.05 6 b NA 7 a 3 0.03 8 b 4 0.03 9 a 1 0.05 10 b 2 0.06 Y no encuentro la manera de hacerlo. Cualquier sugerencia es bienvenida. Gracias de antemano, Oscar -- Oscar Benitez [[alternative HTML version deleted]] ___ R-help-es mailing list R-help-es@r-project.org https://stat.ethz.ch/mailman/listinfo/r-help-es
Re: [R-es] Conservar el nombre de la variable entre varias funciones: ejemplos de resultados
Hola, Gracias por el código. Lo he ejecutado y he visto los resultados. Salvo la parte de los test como te dije, todo lo demás creo que se puede hacer más automático. Probaré a hacer alguna prueba de lo que te comento utilizando el conjunto de MASS. Sobre la duda de los nombres, si le pasas el data.frame tal cual, te debiera de conservar los nombres. Si no es así, pásale como argumento adicional a las funciones los nombres de las columnas/variables... Saludos, Carlos. El 14 de julio de 2015, 22:49, Griera gri...@yandex.com escribió: Hola Carlos: Te adjunto un ejemplo de aplicación: las funciones (he borrado los path de las funciones y las ordenes source() que las carga ) y un ejemplo para ejecutarlas para las opciones que tengo implementadas con la tabla de datos birthwt del paqueteMASS: - Descriptiva de todas las variables de una tabla. - Análisis univariado de todas las variables de una tabla cruzadas con una variable dependiente cualitativa. =Inicio funciones ##-- ## DESUNI ##-- DESUNI = function(XDADES, XDROP=NULL, XVD=NULL, XSPV=NULL # Si és una anàlisi de SPV # Pot tenir el valor TRUE ) { options(digits = 3, OutDec=,, scipen=999) ## No existeix VD: descriptiva if(is.null(XVD)) # No existeix VD: descriptiva { cat(\n*** Descriptiva (no existeix variable dependent)\n) DES(XDADES=XDADES, XDROP=XDROP, XCAMIF=XCAMIF) } ## Existeis VD: anàlisi univariat else # Existeis VD: anàlisi univariat { UNI(XDADES=XDADES, XDROP=XDROP, XVD=XVD, XSPV=XSPV, XCAMIF=XCAMIF) } } ##-- ## DES: Descriptiva de todas las variables ##-- DES = function(XDADES, XDROP=NULL, XCAMIF) { ifelse(is.null(XDROP), DADES_S - XDADES, DADES_S - XDADES[, setdiff(names(XDADES), XDROP) ]) # setdiff Selecciona les variables de XDADES que són diferents de XDROP attach(DADES_S, warn.conflicts = F) XVARLLI=names(DADES_S) for (XVARNOM in names(DADES_S)) { if(is.numeric(get(XVARNOM))) { DES_QUANTI (XVARNOM) } else if(is.factor(get(XVARNOM))) { DES_QUALI (XVARNOM) } else { cat(La variable , XVARNOM, no és de cap dels tipus coneguts, \n) } } # Fi de la funció detach(DADES_S) } ##-- ## DES_QUANTI: Descriptiva variables factor ##-- DES_QUANTI - function(X) { OP - par(no.readonly = TRUE); # save old parameters par(mfrow=c(1,3)) hist(get(X),main=c(Histograma de, X), xlab=X);rug(get(X)) boxplot(get(X), main=c(Diagrama de caixa de, X), ylab=X);rug(get(X),side=2) qqnorm(get(X), main=c(Diagrama Q-Q de, X));qqline(get(X)) cat(\n) par(OP) ESTA_1-data.frame(Variable = X, N_total = length(get(X)), N_valids = sum(!is.na(get(X))), N_desconeguts = sum(is.na(get(X))) ) ESTA_2-data.frame(Variable = X, N = sum(!is.na(get(X))), Mitjana = if (mean(get(X) 10)) {round(mean(get(X), na.rm = TRUE), 2)} else {round(mean(get(X), na.rm = TRUE), 3)}, Err_tipic = if (sd (get(X) 10)) {round(sd (get(X), na.rm = TRUE), 2)} else {round(sd (get(X), na.rm = TRUE), 3)}, Min = min(get(X), na.rm = TRUE), Perc_25 = quantile(get(X),.25), Mediana = median(get(X), na.rm = TRUE), Perc_75 = quantile(get(X),.75), Max = max(get(X), na.rm = TRUE), Interval = max(get(X), na.rm = TRUE) - min(get(X), na.rm = TRUE) ) cat(, \n) cat(Valors valids i desconeguts, \n) print(ESTA_1, row.names = FALSE) cat(, \n) cat(Estadistics, \n) print(ESTA_2, row.names = FALSE) cat(, \n) return(summary(get(X))) } ##-- ## DES_QUALI: Descriptiva variables factor ##-- DES_QUALI - function(X) { cat(Var factor: ,X,\n) XOUT - as.data.frame(table(get(X))) names(XOUT)[1] = X XOUT - transform(XOUT, cumFreq = cumsum(Freq), Percentatge = prop.table(Freq)) print(XOUT)
[R-es] una inquietud de forma
Cordial saludo. Aunque he buscado no he logrado establecer como se hace para lograr salidas en R con el formato de esta página, http://www.um.es/ae/FEIR/10/#stat.desc-del-paquete-pastecs agradezco si alguien me puede orientar, agradezco su amabilidad. Heber [[alternative HTML version deleted]] ___ R-help-es mailing list R-help-es@r-project.org https://stat.ethz.ch/mailman/listinfo/r-help-es
Re: [R-es] Conservar el nombre de la variable entre varias funciones: ejemplos de resultados
Hola Carlos: Te adjunto un ejemplo de aplicación: las funciones (he borrado los path de las funciones y las ordenes source() que las carga ) y un ejemplo para ejecutarlas para las opciones que tengo implementadas con la tabla de datos birthwt del paqueteMASS: - Descriptiva de todas las variables de una tabla. - Análisis univariado de todas las variables de una tabla cruzadas con una variable dependiente cualitativa. =Inicio funciones ##-- ## DESUNI ##-- DESUNI = function(XDADES, XDROP=NULL, XVD=NULL, XSPV=NULL # Si és una anàlisi de SPV # Pot tenir el valor TRUE ) { options(digits = 3, OutDec=,, scipen=999) ## No existeix VD: descriptiva if(is.null(XVD)) # No existeix VD: descriptiva { cat(\n*** Descriptiva (no existeix variable dependent)\n) DES(XDADES=XDADES, XDROP=XDROP, XCAMIF=XCAMIF) } ## Existeis VD: anàlisi univariat else # Existeis VD: anàlisi univariat { UNI(XDADES=XDADES, XDROP=XDROP, XVD=XVD, XSPV=XSPV, XCAMIF=XCAMIF) } } ##-- ## DES: Descriptiva de todas las variables ##-- DES = function(XDADES, XDROP=NULL, XCAMIF) { ifelse(is.null(XDROP), DADES_S - XDADES, DADES_S - XDADES[, setdiff(names(XDADES), XDROP) ]) # setdiff Selecciona les variables de XDADES que són diferents de XDROP attach(DADES_S, warn.conflicts = F) XVARLLI=names(DADES_S) for (XVARNOM in names(DADES_S)) { if(is.numeric(get(XVARNOM))) { DES_QUANTI (XVARNOM) } else if(is.factor(get(XVARNOM))) { DES_QUALI (XVARNOM) } else { cat(La variable , XVARNOM, no és de cap dels tipus coneguts, \n) } } # Fi de la funció detach(DADES_S) } ##-- ## DES_QUANTI: Descriptiva variables factor ##-- DES_QUANTI - function(X) { OP - par(no.readonly = TRUE); # save old parameters par(mfrow=c(1,3)) hist(get(X),main=c(Histograma de, X), xlab=X);rug(get(X)) boxplot(get(X), main=c(Diagrama de caixa de, X), ylab=X);rug(get(X),side=2) qqnorm(get(X), main=c(Diagrama Q-Q de, X));qqline(get(X)) cat(\n) par(OP) ESTA_1-data.frame(Variable = X, N_total = length(get(X)), N_valids = sum(!is.na(get(X))), N_desconeguts = sum(is.na(get(X))) ) ESTA_2-data.frame(Variable = X, N = sum(!is.na(get(X))), Mitjana = if (mean(get(X) 10)) {round(mean(get(X), na.rm = TRUE), 2)} else {round(mean(get(X), na.rm = TRUE), 3)}, Err_tipic = if (sd (get(X) 10)) {round(sd (get(X), na.rm = TRUE), 2)} else {round(sd (get(X), na.rm = TRUE), 3)}, Min = min(get(X), na.rm = TRUE), Perc_25 = quantile(get(X),.25), Mediana = median(get(X), na.rm = TRUE), Perc_75 = quantile(get(X),.75), Max = max(get(X), na.rm = TRUE), Interval = max(get(X), na.rm = TRUE) - min(get(X), na.rm = TRUE) ) cat(, \n) cat(Valors valids i desconeguts, \n) print(ESTA_1, row.names = FALSE) cat(, \n) cat(Estadistics, \n) print(ESTA_2, row.names = FALSE) cat(, \n) return(summary(get(X))) } ##-- ## DES_QUALI: Descriptiva variables factor ##-- DES_QUALI - function(X) { cat(Var factor: ,X,\n) XOUT - as.data.frame(table(get(X))) names(XOUT)[1] = X XOUT - transform(XOUT, cumFreq = cumsum(Freq), Percentatge = prop.table(Freq)) print(XOUT) print(-) } ##-- ## UNI: Análisis univarido ##-- UNI = function(XDADES, XDROP=NULL, XVD, XSPV=NULL, # Si és una anàlisi de SPV XCAMIF ) { ifelse(is.null(XDROP), DADES_S - XDADES, DADES_S - XDADES[, setdiff(names(XDADES), XDROP) ]) attach(DADES_S, warn.conflicts = F) cat(\n Descriptiva de totes les variables seleccionades\n) print(summary(DADES_S)) for (XVARNOMT in
[R-es] Subiendo a CRAN un paquete que incluye ejemplos con paralelización
Hola: Estoy mejorando un paquete que incluía varios procedimientos bootstrap mediante paralelización (con foreach, en Windows). El problema es que al hacer el R CMD check (uso RStudio) me da error, ya que CRAN no permite paralelización con más de dos núcleos (If running a package uses multiple threads/cores it must never use more than two simultaneously: the check farm is a shared resource and will typically be running many checks simultaneously.). He encontrado una sugerencia para evitar el problema: incluir un argumento opcional en mis funciones para evitar la paralelización en los ejemplos que suba a CRAN, es decir, incluir un argumento lógico del tipo 'parallel = TRUE' en las funciones que fijaría en FALSE en los ejemplos que incluya al subir el paquete a CRAN. Lo que ocurre es que me parece un poco chapuza y casi duplica el código innecesariamente. Otra opción sería utilizar la opción \donttest() en la parte de los ejemplos que usan paralelización, pero por experiencias anteriores me consta que CRAN sólo permite esta opción muy ocasionalmente. ¿Alguna idea para evitar el problema? Gracias de antemano. *Dr. Antonio José Sáez-Castillo*Department of Statistics and Operational Research Escuela Politécnica Superior de Linares UNIVERSIDAD DE JAÉN C/ Alfonso X el Sabio, 28 23700 Linares (Jaén) Teléfono: +34 953 64 85 78 e-mail: ajs...@ujaen.es https://www.researchgate.net/profile/Antonio_Saez-Castillo http://twitter.com/ajsaezUJA [[alternative HTML version deleted]] ___ R-help-es mailing list R-help-es@r-project.org https://stat.ethz.ch/mailman/listinfo/r-help-es