<html>
<head>
<meta content="text/html; charset=utf-8" http-equiv="Content-Type">
</head>
<body bgcolor="#FFFFFF" text="#000000">
De vuelta a agradecer a ambos, porque justo ahora estaba de nuevo
con un problema parecido y he vuelto a consultar el correo. <br>
<br>
Muchas gracias por su ayuda! <br>
<br>
Saludos <br>
<br>
<pre class="moz-signature" cols="72">DMTV Fernando Macedo
Asistente del área Mejoramiento Genético
Facultad de Veterinaria - UdelarR - Uruguay
Tel: 26284291
Cel.: 098596947
<a class="moz-txt-link-abbreviated" href="mailto:fermace@gmail.com">fermace@gmail.com</a></pre>
<div class="moz-cite-prefix">El 24/02/15 a las 19:28, Carlos Ortega
escibió:<br>
</div>
<blockquote
cite="mid:CAOKbq8j1e_hBfX796iyWd8hgcrod0Jjev+FehqX6m9KqLG06zQ@mail.gmail.com"
type="cite">
<div dir="ltr">
<div class="gmail_default"
style="font-family:verdana,sans-serif">Hola,<br>
<br>
</div>
<div class="gmail_default"
style="font-family:verdana,sans-serif">He querido comprobar
los tiempos proceso que se obtendrían utilizando una u otra
opción (mapply vs. sapply) para un conjunto equivalente en
tamaño al que Fernando planteaba (data.frame de 316 columnas y
562000 filas).<br>
<br>
</div>
<div class="gmail_default"
style="font-family:verdana,sans-serif">Y estos son los
resultados:<br>
<ul>
<li>En mi máquina MacAir (4GB RAM - 1.3GHz Intel Core i5) :</li>
<ul>
<li>con mapply obtengo tiempos de 1.4 minutos.</li>
<li>con sapply se me bloqueaba RStudio.</li>
</ul>
</ul>
</div>
<div class="gmail_default"
style="font-family:verdana,sans-serif">En ambos casos,
iniciaba sesión "limpia" de RStudio.<br>
<br>
</div>
<div class="gmail_default"
style="font-family:verdana,sans-serif">Para no tener problemas
de máquina he probado ambos casos en la plataforma "Microsoft
Azure Machine Learning" y los resultados son los siguientes:<br>
<ul>
<li>mapply: 34.862 segundos</li>
<li>sapply: 35.057 segundos<br>
</li>
</ul>
</div>
<div class="gmail_default"
style="font-family:verdana,sans-serif">Sobre la plataforma de
Microsoft, he vuelto a ver un comportamiento raro con la
opción de sapply, hasta que he cambiado en la función
"as.character()" por "as.vector()" y es cuando ha funcionado
sin problemas con los tiempos indicados.<br>
<br>
</div>
<div class="gmail_default"
style="font-family:verdana,sans-serif">Adjunto capturas de
pantalla del código ejecutado en cada caso y los tiempos de
ejecución que proporciona la plataforma.<br>
</div>
<div class="gmail_default"
style="font-family:verdana,sans-serif">En ambos casos, los
tiempos incluyen la generación del data.frame equivalente
(562000 x 316).<br>
</div>
<div class="gmail_default"
style="font-family:verdana,sans-serif"><br>
<br>
<br>
<b>OPCIÓN A (MAPPLY)</b><br>
<br>
<img alt="Imágenes integradas 2"
src="cid:part1.00000809.03060906@gmail.com" height="482"
width="530"><br>
<img alt="Imágenes integradas 6"
src="cid:part2.09090009.03050202@gmail.com" height="355"
width="473"><br>
<br>
<br>
<br>
<br>
</div>
<div class="gmail_default"
style="font-family:verdana,sans-serif"><b>OPCIÓN B (SAPPLY)</b><br>
</div>
<div class="gmail_default"
style="font-family:verdana,sans-serif"><br>
<br>
<img alt="Imágenes integradas 1"
src="cid:part3.00010401.01040005@gmail.com" height="552"
width="543"><br>
<br>
<img alt="Imágenes integradas 5"
src="cid:part4.00060409.09020300@gmail.com" height="433"
width="558"><br>
</div>
</div>
<div class="gmail_extra"><br>
<div class="gmail_quote">El 24 de febrero de 2015, 17:12,
Fernando Macedo <span dir="ltr"><<a moz-do-not-send="true"
href="mailto:fermace@gmail.com" target="_blank">fermace@gmail.com</a>></span>
escribió:<br>
<blockquote class="gmail_quote" style="margin:0 0 0
.8ex;border-left:1px #ccc solid;padding-left:1ex">
<div dir="ltr">
<div bgcolor="#FFFFFF" text="#000000">
<div>Muchas gracias a los dos, los ejemplos de uso de
las funciones *apply siempre son bienvenidos. <br>
<br>
Saludos <br>
<br>
<pre cols="72">Fernando Macedo
</pre>
El 24/02/15 a las 12:12, Jorge I Velez escribió:<br>
</div>
<div>
<div class="h5">
<blockquote type="cite">
<div dir="ltr">
<div class="gmail_default"
style="font-family:arial,helvetica,sans-serif;font-size:small">Gracias,
Carlos.</div>
<div class="gmail_default"
style="font-family:arial,helvetica,sans-serif;font-size:small"><br>
</div>
<div class="gmail_default"
style="font-family:arial,helvetica,sans-serif;font-size:small">Habia
pensado en algo similar usando sapply():</div>
<div class="gmail_default"
style="font-family:arial,helvetica,sans-serif;font-size:small"><br>
</div>
<div class="gmail_default"
style="font-family:arial,helvetica,sans-serif;font-size:small">sapply(seq(1,
ncol(vtmp), by = 2), function(i)
c(rbind(as.character(vtmp[, i]),
as.character(vtmp[, i+1]))))<br>
</div>
<div class="gmail_default"
style="font-family:arial,helvetica,sans-serif;font-size:small"><br>
</div>
<div class="gmail_default"
style="font-family:arial,helvetica,sans-serif;font-size:small">Dependiendo
de la dimension de los datos, quizas mapply()
sea mas eficiente que sapply().</div>
<div class="gmail_default"
style="font-family:arial,helvetica,sans-serif;font-size:small"><br>
</div>
<div class="gmail_default"
style="font-family:arial,helvetica,sans-serif;font-size:small">Saludos
cordiales,</div>
<div class="gmail_default"
style="font-family:arial,helvetica,sans-serif;font-size:small">Jorge.-</div>
<div class="gmail_default"
style="font-family:arial,helvetica,sans-serif;font-size:small"><br>
</div>
<div class="gmail_default"><br>
</div>
<div class="gmail_extra">
<div class="gmail_quote">2015-02-25 1:01
GMT+11:00 Carlos Ortega <span dir="ltr"><<a
moz-do-not-send="true"
href="mailto:cof@qualityexcellence.es"
target="_blank">cof@qualityexcellence.es</a>></span>:<br>
<blockquote class="gmail_quote"
style="margin:0 0 0 .8ex;border-left:1px
#ccc solid;padding-left:1ex">
<div dir="ltr">
<div
style="font-family:verdana,sans-serif">Hola,<br>
<br>
</div>
<div
style="font-family:verdana,sans-serif">Este
otro ejemplo a partir de la idea de
Jorge, de cómo procesar toda la tabla
que tienes:<br>
<br>
> #Creo un data.frame de ejemplo
todo con letras<br>
> vtmp <-
as.data.frame(lapply(letters,function(x)
{ rep(x,each=50) }))<br>
> names(vtmp) <-
paste("col",LETTERS,sep="")<br>
> head(vtmp)<br>
colA colB colC colD colE colF colG
colH colI colJ colK colL colM colN
colO colP colQ colR colS colT colU
colV colW colX colY colZ<br>
1 a b c d e f
g h i j k l m
n o p q r s t
u v w x y z<br>
2 a b c d e f
g h i j k l m
n o p q r s t
u v w x y z<br>
3 a b c d e f
g h i j k l m
n o p q r s t
u v w x y z<br>
4 a b c d e f
g h i j k l m
n o p q r s t
u v w x y z<br>
5 a b c d e f
g h i j k l m
n o p q r s t
u v w x y z<br>
6 a b c d e f
g h i j k l m
n o p q r s t
u v w x y z<br>
> <br>
> #Los números de columnas impares
de mi data.frame<br>
> matIndex <- seq(1,
dim(vtmp)[2], by=2)<br>
> <br>
> #Función para juntar dos columnas
(idea de Jorge)<br>
> mifun <- function(x,y)
c(rbind(as.vector(vtmp[,x]),as.vector(vtmp[,y])))<br>
> <br>
> #Resulado aplicando mapply. Coge
dos columnas consecutivas y las
alterna<br>
> #y así de forma iterativa para
cada una de las columnas que indica
"matIndex" y la siguiente columna
"matIndex+1" <br>
> resultado <-
mapply(mifun,matIndex, matIndex+1)<br>
> head(kk)<br>
[,1] [,2] [,3] [,4] [,5] [,6]
[,7] [,8] [,9] [,10] [,11] [,12] [,13]<br>
[1,] "a" "c" "e" "g" "i" "k"
"m" "o" "q" "s" "u" "w" "y"
<br>
[2,] "b" "d" "f" "h" "j" "l"
"n" "p" "r" "t" "v" "x" "z"
<br>
[3,] "a" "c" "e" "g" "i" "k"
"m" "o" "q" "s" "u" "w" "y"
<br>
[4,] "b" "d" "f" "h" "j" "l"
"n" "p" "r" "t" "v" "x" "z"
<br>
[5,] "a" "c" "e" "g" "i" "k"
"m" "o" "q" "s" "u" "w" "y"
<br>
[6,] "b" "d" "f" "h" "j" "l"
"n" "p" "r" "t" "v" "x" "z"
<br>
> <br>
<br>
</div>
<div
style="font-family:verdana,sans-serif">Saludos,<br>
</div>
<div
style="font-family:verdana,sans-serif">Carlos
Ortega<br>
</div>
<div
style="font-family:verdana,sans-serif"><a
moz-do-not-send="true"
href="http://www.qualityexcellence.es"
target="_blank">www.qualityexcellence.es</a><br>
</div>
</div>
<div class="gmail_extra"><br>
<div class="gmail_quote">El 24 de
febrero de 2015, 14:10, Fernando
Macedo <span dir="ltr"><<a
moz-do-not-send="true"
href="mailto:fermace@gmail.com"
target="_blank">fermace@gmail.com</a>></span>
escribió:
<div>
<div><br>
<blockquote class="gmail_quote"
style="margin:0 0 0
.8ex;border-left:1px #ccc
solid;padding-left:1ex"> Excelente!
Ahora corre muy rápido. No
conocía ese método, creo que me
va a<br>
resultar muy útil.<br>
<br>
Muchas gracias y saludos.<br>
<br>
Fernando Macedo<br>
<br>
El 24/02/15 a las 10:51, Jorge I
Velez escribió:<br>
<div>
<div><br>
Fernando,<br>
<br>
Podrias intentar<br>
<br>
R> a <- rep('a', 5)<br>
R> b <- rep('b', 5)<br>
R> a<br>
[1] "a" "a" "a" "a" "a"<br>
R> b<br>
[1] "b" "b" "b" "b" "b"<br>
R> c(rbind(a, b))<br>
[1] "a" "b" "a" "b" "a"
"b" "a" "b" "a" "b"<br>
<br>
Saludos,<br>
Jorge.-<br>
<br>
<br>
2015-02-24 23:49 GMT+11:00
Fernando Macedo <<a
moz-do-not-send="true"
href="mailto:fermace@gmail.com"
target="_blank">fermace@gmail.com</a>>:<br>
<br>
> Buenas a todos.<br>
> Relato el problema:<br>
><br>
> - tengo un archivo de
316 columnas por 562000
filas (aprox.).<br>
> - esas 316 columnas
representan 158 sujetos, o
sea dos columnas por cada<br>
> individuo conteniendo
información que debe ser
condensada en una sola.<br>
><br>
> Lo que necesito es ir
tomando las dos columnas de
cada individuo e<br>
> intercalar los
elementos de los vectores
formando uno solo.<br>
><br>
> Ejemplificando sería
algo así:<br>
><br>
> > a<br>
> [1] "a" "a" "a" "a" "a"<br>
> > b<br>
> [1] "b" "b" "b" "b" "b"<br>
> > c<br>
> [1] "a" "b" "a" "b"
"a" "b" "a" "b" "a" "b"<br>
><br>
><br>
> Estoy haciendo con un
loop for pero es realmente
muy lento. He buscado por<br>
> algún paquete que ya lo
haga directamente pero no he
tenido mucho éxito. Me<br>
> imagino que con sapply
o apply pueda ser mucho más
efectivo pero me ha<br>
> resultado complicado
para entender la sintaxis de
estas funciones cuando<br>
> involucra más de un
objeto (vector, matriz,
etc...).<br>
><br>
> Desde ya agradezco las
sugerencias que puedan
verter sobre este problema.<br>
><br>
> --<br>
> Fernando Macedo<br>
><br>
> [[alternative
HTML version deleted]]<br>
><br>
>
_______________________________________________<br>
> R-help-es mailing list<br>
> <a
moz-do-not-send="true"
href="mailto:R-help-es@r-project.org"
target="_blank">R-help-es@r-project.org</a><br>
> <a
moz-do-not-send="true"
href="https://stat.ethz.ch/mailman/listinfo/r-help-es"
target="_blank">https://stat.ethz.ch/mailman/listinfo/r-help-es</a><br>
><br>
<br>
[[alternative HTML
version deleted]]<br>
<br>
_______________________________________________<br>
R-help-es mailing list<br>
<a moz-do-not-send="true"
href="mailto:R-help-es@r-project.org"
target="_blank">R-help-es@r-project.org</a><br>
<a moz-do-not-send="true"
href="https://stat.ethz.ch/mailman/listinfo/r-help-es"
target="_blank">https://stat.ethz.ch/mailman/listinfo/r-help-es</a><br>
</div>
</div>
</blockquote>
</div>
</div>
</div>
<span><font color="#888888"><br>
<br clear="all">
<br>
-- <br>
<div><span
style="font-family:verdana,sans-serif">Saludos,</span><br
style="font-family:verdana,sans-serif">
<span
style="font-family:verdana,sans-serif">Carlos
Ortega</span><br
style="font-family:verdana,sans-serif">
<span
style="font-family:verdana,sans-serif"><a
moz-do-not-send="true"
href="http://www.qualityexcellence.es"
target="_blank">www.qualityexcellence.es</a></span></div>
</font></span></div>
</blockquote>
</div>
<br>
</div>
<div class="gmail_extra"><br>
</div>
</div>
</blockquote>
<br>
</div>
</div>
</div>
</div>
</blockquote>
</div>
<br>
<br clear="all">
<br>
-- <br>
<div class="gmail_signature"><span
style="font-family:verdana,sans-serif">Saludos,</span><br
style="font-family:verdana,sans-serif">
<span style="font-family:verdana,sans-serif">Carlos Ortega</span><br
style="font-family:verdana,sans-serif">
<span style="font-family:verdana,sans-serif"><a
moz-do-not-send="true"
href="http://www.qualityexcellence.es" target="_blank">www.qualityexcellence.es</a></span></div>
</div>
</blockquote>
<br>
</body>
</html>