Re: [R-es] Conservar el nombre de la variable entre varias funciones

2015-07-14 Por tema Griera-yandex
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

2015-07-14 Por tema Ignacio Martinez
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

2015-07-14 Por tema Ignacio Martinez
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

2015-07-14 Por tema Oscar Benitez
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

2015-07-14 Por tema Carlos Ortega
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

2015-07-14 Por tema heber sarmiento via R-help-es
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

2015-07-14 Por tema Griera
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

2015-07-14 Por tema Antonio José Saez Castillo
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