<font size=2 face="sans-serif">Hola:</font>
<br>
<br><font size=2 face="sans-serif">Hace como un mes pregunte si se podía
desarrollar una barra de progreso que informara del progreso de una subida
de datos a SQL Server desde R.</font>
<br>
<br><font size=2 face="sans-serif">Miguel Ángel me dio una orientacion
de como enfocar el problema y al final lo he conseguido hacer usando el
paquete snowfall.</font>
<br><font size=2 face="sans-serif">Ahora bien hay una parte del código
que, aunque funciona no entiendo muy bien como, porque "adapte"
un código que encontré por internet.</font>
<br>
<br><font size=2 face="sans-serif">El proceso consiste básicamente en crear
dos funciones:</font>
<br><font size=2 face="sans-serif">-La primera es una barra de progreso
que va obteniendo, a intervalos regulares, el numero de registros que hay
en la tabla donde se realiza la inserción de datos.</font>
<br><font size=2 face="sans-serif">-La segunda es una que establece la
conexión al SQL Server e inserta los datos en el.</font>
<br>
<br><font size=2 face="sans-serif">La idea es que mientras un cluster se
encarga de gestionar la barra de progreso, el otro realiza la inserción
de los datos.</font>
<br>
<br><font size=2 face="sans-serif">La cuestión es que esta instrucción
(que funciona bien) no entiendo como funciona:</font>
<br><font size=2 face="sans-serif">sfClusterApply( tarea , function(f)
f())</font>
<br>
<br><font size=2 face="sans-serif">En concreto <b>function(f) f() </b>es
lo que aplica las funciones de la lista <b>tareas</b> (t1 y t2) a cada
cluster por separado y en paralelo, pero no entiendo que es lo que realiza
esa sintaxis.</font>
<br><font size=2 face="sans-serif">¿Alguien me podría explicar porque se
puede definir así y no como yo hubiera pensado que era:?;</font>
<br><font size=2 face="sans-serif">sfClusterApply( tarea, pb(tab,asubir,entabla,frec),subida(datos,tab))</font>
<br>
<br>
<br><font size=2 face="sans-serif">El código de todo el proceso es el siguiente:</font>
<br>
<br><font size=2 face="sans-serif">#Cargamos los paquetes necesarios</font>
<br><font size=2 face="sans-serif">library(snowfall)</font>
<br><font size=2 face="sans-serif">library(RODBC)</font>
<br>
<br><font size=2 face="sans-serif">#Cargamos el df (datos) que vamos a
subir al SQL Server</font>
<br><font size=2 face="sans-serif">load("C:\\Documents and Settings\\My
Documents\\datos.Rdata")</font>
<br>
<br><font size=2 face="sans-serif">###########################################</font>
<br><font size=2 face="sans-serif">#   Iniciamos los 2 clusters  
       #################</font>
<br><font size=2 face="sans-serif">###########################################</font>
<br>
<br><font size=2 face="sans-serif">#Iniciamos dos cluster para trabajar
en paralelo y el log lo guardamos en esclavos txt</font>
<br><font size=2 face="sans-serif">sfInit( parallel=TRUE, cpus=2, slaveOutfile="esclavos.txt"
)</font>
<br>
<br><font size=2 face="sans-serif">#Cargamos paquete RODBC en los dos cluster</font>
<br><font size=2 face="sans-serif">sfLibrary( RODBC )</font>
<br>
<br>
<br><font size=2 face="sans-serif">############################################</font>
<br><font size=2 face="sans-serif"># Definimos variables del proceso  
    ############</font>
<br><font size=2 face="sans-serif">############################################</font>
<br>
<br><font size=2 face="sans-serif">tab <- as.character("Pruebas_R")
               
               
               
               
               
       #Nombre de la tabla donde se realizara
la inserción de los datos</font>
<br><font size=2 face="sans-serif">asubir <- as.numeric(nrow(datos))
               
               
               
               
               
       #Numero de registros (filas) de nuestro
df datos que se van a subir al          
               
               
               
               
               
               
              #SQL Server</font>
<br>
<br>
<br><font size=2 face="sans-serif">canal <- odbcDriverConnect( "case=nochange;
Driver=SQL Server; Server=X; Database=X; uid=X; pwd=X; wsid=X;")  
       #Abrimos conexion RODBC</font>
<br><font size=2 face="sans-serif">entabla <- as.numeric(sqlQuery(canal,paste("SELECT
Count(*) ", " FROM ",tab, sep="")))    
               
               
   #Nº de registro que hay actualmente en tabla en la
que vamos a insertar            
               
               
               
               
               
               
            #los datos</font>
<br>
<br><font size=2 face="sans-serif">close(canal)        
               
               
               
               
               
               
          #Cerramos conexión RODBC</font>
<br><font size=2 face="sans-serif">rm(canal)        
               
               
               
               
               
               
       #Eliminamos conexión RODBC    
   </font>
<br>
<br><font size=2 face="sans-serif">frec <- 0.1      
               
               
               
               
               
               
         #Establecemos frecuencia
de actualización de la barra de progreso</font>
<br>
<br>
<br><font size=2 face="sans-serif">###########################################</font>
<br><font size=2 face="sans-serif">#    FUNCIONES ############################</font>
<br><font size=2 face="sans-serif">###########################################</font>
<br>
<br>
<br><font size=2 face="sans-serif">#Función que genera una barra de progreso
que se actualiza según la variable frec e informa del numero de registros</font>
<br><font size=2 face="sans-serif">#insertados hasta ese momento y de los
registros que quedan por insertar</font>
<br>
<br><font size=2 face="sans-serif">pb <-function( tab,asubir,entabla
,frec ){</font>
<br><font size=2 face="sans-serif">         
              canal1
<-  odbcDriverConnect( "case=nochange; Driver=SQL Server;
Server=X; Database=X; uid=X; pwd=X; wsid=X;")      
    #Conexión RODBC</font>
<br><font size=2 face="sans-serif">         
              barra
<- winProgressBar(title="SUBIENDO DATOS A SQL ", label = "Subido
el:  ", min= 0, max= 1,initial= 0, width = 800)    
   #Definimos barra de progreso</font>
<br><font size=2 face="sans-serif">         
              total
<- as.numeric(0)              
               
               
               
               
               
         #Vble total acumulara
el nº registros que </font>
<br><font size=2 face="sans-serif">         
               
               
               
               
               
               
               
               
      #hay en la tabla</font>
<br><font size=2 face="sans-serif">         
              while
( entabla + asubir > total )          
               #El
bucle se realizara hasta que todos los datos estén subidos</font>
<br><font size=2 face="sans-serif">         
               
              {</font>
<br><font size=2 face="sans-serif">         
               
              canal1
<- odbcReConnect(canal1)          
               
               
             #Conexión
RODBC</font>
<br><font size=2 face="sans-serif">         
               
              total
<- as.numeric(sqlQuery(canal1,paste("SELECT Count(*) FROM ",tab,
sep="")))        #Obtenemos el nº
de registros que hay en la tabla en ese </font>
<br><font size=2 face="sans-serif">         
               
               
               
               
               
               
               
      #momento</font>
<br><font size=2 face="sans-serif">         
               
              porcen
<- as.numeric((total - entabla) / asubir)        
               
               
       #Calculamos porcentaje de registros
subidos del total a subir</font>
<br><font size=2 face="sans-serif">         
               
              setWinProgressBar(barra,
porcen,title="SUBIENDO DATOS A SQL",        
               
#Actualizamos la barra de progreso con la </font>
<br><font size=2 face="sans-serif">         
               
               
              label
=paste("Subido el:  ", round(porcen *100,0), "% de
los datos.         #la información obtenida
y calculada</font>
<br><font size=2 face="sans-serif">         
               
               
              Se han
subido ",total - entabla, " registros de ", asubir, "."
, sep=""))</font>
<br><font size=2 face="sans-serif">         
               
              flush.console()
               
               
               
               
               #Refrescamos
la consola</font>
<br><font size=2 face="sans-serif">         
               
              Sys.sleep(frec)
               
               
               
               
               #Hacemos
una pausa de 0.1 segundos</font>
<br><font size=2 face="sans-serif">         
               
              }</font>
<br><font size=2 face="sans-serif">         
              close(barra,
canal1)                
               #Cerramos
los objetos usados</font>
<br><font size=2 face="sans-serif">         
              rm(barra,canal1,total)
               
               #Eliminamos
los objetos usados</font>
<br><font size=2 face="sans-serif">         
              }  
     </font>
<br>
<br><font size=2 face="sans-serif">#Funcion que realiza la insercion de
los registros del df (datos) en la tabla de SQL Server (tabla)    
               
   </font>
<br><font size=2 face="sans-serif">subida <- function( datos, tab)</font>
<br><font size=2 face="sans-serif">         
              {</font>
<br><font size=2 face="sans-serif">         
              canal2
<-  odbcDriverConnect( "case=nochange; Driver=SQL Server;
Server=X; Database=X; uid=X; pwd=X; wsid=X;")      
  #Conexión RODBC</font>
<br><font size=2 face="sans-serif">         
              sqlSave(canal2,datos,tablename=
tab, rownames = FALSE, append=TRUE, fast=TRUE )        
               
               #Realizamos
la inserción del df (datos) </font>
<br><font size=2 face="sans-serif">         
               
               
               
               
               
               
               
               
      #en tabla (tabla)</font>
<br><font size=2 face="sans-serif">         
              close(canal2)
               
               
               
               
               
               
               #Cerramos
conexión RODBC</font>
<br><font size=2 face="sans-serif">         
              rm(canal2)
               
               
               
               
               
               
               #Eliminamos
conexión RODBC        </font>
<br><font size=2 face="sans-serif">         
              }</font>
<br>
<br>
<br>
<br><font size=2 face="sans-serif">##############################</font>
<br><font size=2 face="sans-serif"># Preparación de los cluster #####</font>
<br><font size=2 face="sans-serif">##############################</font>
<br>
<br>
<br><font size=2 face="sans-serif">sfRemoveAll()        
               
               
               
          #Eliminamos los objetos
que pudieran contener los cluster</font>
<br><font size=2 face="sans-serif">sfExport("tab","asubir","entabla","frec","datos",
"pb","subida")        
       #Exportamos a los 2 cluster los objetos
que necesitamos</font>
<br>
<br><font size=2 face="sans-serif">tarea <- list( t1 = function() pb(tab,asubir,entabla,frec),t2
= function() subida(datos,tab))   #Creamos lista con las dos funciones
definidas previamente</font>
<br>
<br>
<br><font size=2 face="sans-serif">############################</font>
<br><font size=2 face="sans-serif"># Inserción de datos #######</font>
<br><font size=2 face="sans-serif">############################</font>
<br>
<br><font size=2 face="sans-serif">hora.ini <- Sys.time()    
               
               
   #Establecemos tiempo de inicio del proceso</font>
<br>
<br><font size=2 face="sans-serif">sfClusterApply( tarea , function(f)
f())                
       #Lanzamos en el primer cluster la t1
de la lista tarea, en el segundo cluster se lanzara t2 de la lista tarea
de forma paralela</font>
<br>
<br><font size=2 face="sans-serif">print(paste("Tiempo transcurrido",round(difftime(Sys.time(),hora.ini,units="hours"
),digits = 2) , "horas"))          #Una
vez finalizada la inserción informamos del tiempo que hemos tardado</font>
<br>
<br><font size=2 face="sans-serif">sfStop()        
               
               
               
               
       #Detenemos los dos cluster</font>
<br>
<br>
<br>
<br><font size=2 face="sans-serif">Un saludo</font>
<br>
<br><font size=2 face="Arial"><b>José Luis Gilsanz Gómez</b></font><font size=3><b>
</b></font><font size=1 face="Arial"><br>
Estadística <br>
</font><font size=1 color=#009f82 face="Arial"><b><br>
Tasaciones Hipotecarias </b></font><font size=1 face="Arial"><br>
María de Molina, 54 - 28006 - Madrid<br>
Tel. : 34-914549694<br>
Fax : 34-917822164<br>
Email : </font><a href=mailto:jluis.gilsanz@tasacionesh.com><font size=1 color=blue face="Arial"><u>jluis.gilsanz@tasacionesh.com</u></font></a><font size=1 face="Arial">
<br>
Site web: </font><a href=http://www.tasacionesh.es/><font size=1 color=blue face="Arial"><u>www.tasacionesh.es</u></font></a><font size=1 face="Arial">
<br>
</font><img src=cid:_2_08B259BC08B25180002FDA42C1257B66>
<p>
<br><font size=3><br>
<br>
</font>
<div align=center>
<br><font size=1 face="Arial">-- AVISO LEGAL --</font></div>
<br><font size=1 face="Arial">Los datos personales que en esta comunicación
aparecen, así como los que nuestra empresa mantiene de Vd. y de su empresa,
son tratados con la finalidad de mantener el contacto así como realizar
las gestiones que en esta aparecen (Ley Orgánica 15/1999, de 13 de diciembre,
de Protección de Datos de Carácter Personal). <br>
Puede ejercer sus derechos de acceso, rectificación, cancelación y oposición
dirigiéndose a </font><a href=mailto:atencion.clientesth@tasacionesh.com><font size=1 color=blue face="Arial"><u>atencion.clientesth@tasacionesh.com</u></font></a><font size=1 face="Arial">.<br>
La utilización de su dirección de correo electrónico por parte de nuestra
empresa queda sujeta a las disposiciones de la Ley 34/2002, de Servicios
de la Sociedad de la Información y el Comercio Electrónico. Si Vd. recibe
comunicación comercial por nuestra parte y desea dejar de recibirla, rogamos
nos lo comunique por vía electrónica a través de la dirección </font><a href=mailto:atencion.clientesth@tasacionesh.com><font size=1 color=blue face="Arial"><u>atencion.clientesth@tasacionesh.com
</u></font></a><font size=1 face="Arial">.</font><font size=3> </font>
<br>
<br>
<br>
<table width=100%>
<tr>
<td><img src=cid:_1_08B3265C08B3225C002FDA42C1257B66 width=80 height=1>
<td width=100%>
<table width=100%>
<tr valign=top>
<td width=100%><font size=2 face="sans-serif"><b>{In Archive}  Resumen
de R-help-es, Vol 50, Envío 14</b></font></table>
<br>
<table width=100%>
<tr>
<td><font size=2 color=#e26200 face="sans-serif"><b>(Internet)</b></font>
<br><font size=2 color=#e26200 face="sans-serif"><b>r-help-es-request </b></font>
<td>
<td valign=top>
<table width=100%>
<tr valign=top>
<td><font size=2 color=#8f8f8f face="sans-serif">To:</font>
<td><font size=2 face="sans-serif">r-help-es</font></table>
<br>
<td>
<div align=right><font size=1 face="sans-serif">05/04/2013 13:07</font></div></table>
<br>
<table width=100%>
<tr>
<td><font size=2 color=#8f8f8f face="sans-serif">Sent by : </font><font size=2 color=#e26200 face="sans-serif"><b>r-help-es-bounces@r-project.org</b></font>
<br><font size=1 face="sans-serif"><b>Please respond to r-help-es</b></font>
<td>
<div align=right></div></table>
<br></table>
<br>
<br>
<table width=100%>
<tr valign=top>
<td><font size=1 color=#8f8f8f face="sans-serif">Archive: </font>
<td><font size=1 face="sans-serif">This message is being viewed in an archive.</font></table>
<br>
<hr>
<br>
<br>
<br><tt><font size=2>Envíe los mensajes para la lista R-help-es a<br>
                
r-help-es@r-project.org<br>
<br>
Para subscribirse o anular su subscripción a través de la WEB<br>
                
</font></tt><a href="https://stat.ethz.ch/mailman/listinfo/r-help-es"><tt><font size=2>https://stat.ethz.ch/mailman/listinfo/r-help-es</font></tt></a><tt><font size=2><br>
<br>
O por correo electrónico, enviando un mensaje con el texto "help"
en<br>
el asunto (subject) o en el cuerpo a:<br>
                
r-help-es-request@r-project.org<br>
<br>
Puede contactar con el responsable de la lista escribiendo a:<br>
                
r-help-es-owner@r-project.org<br>
<br>
Si responde a algún contenido de este mensaje, por favor, edite la<br>
linea del asunto (subject) para que el texto sea mas especifico que:<br>
"Re: Contents of R-help-es digest...". Además, por favor, incluya
en<br>
la respuesta sólo aquellas partes del mensaje a las que está<br>
respondiendo.<br>
<br>
<br>
Asuntos del día:<br>
<br>
   1. Re: Barra de progreso en RODBC (jluis.gilsanz@tasacionesh.com)<br>
<br>
<br>
----------------------------------------------------------------------<br>
<br>
Message: 1<br>
Date: Fri, 5 Apr 2013 13:05:51 +0200<br>
From: jluis.gilsanz@tasacionesh.com<br>
To: miguel.angel.rodriguez.muinos@sergas.es<br>
Cc: r-help-es@r-project.org<br>
Subject: Re: [R-es] Barra de progreso en RODBC<br>
Message-ID:<br>
                
<OF5A83E487.D4B34CDF-ONC1257B44.003C120B-C1257B44.003CF664@bnpparibas.com><br>
                
<br>
Content-Type: text/plain; charset="iso-8859-1"<br>
<br>
Hola Miguel Ángel.<br>
<br>
<br>
Pues me acabas de dar una idea estupenda¡¡¡<br>
<br>
Haré unas pruebas de la velocidad media de subida de registros desde R
a <br>
MSSQL.<br>
Obtendré un valor de x registros por segundo.<br>
Creare esa ventana (me pondré a bucear en la ayuda para ver como hacerlo)
<br>
y como se cuantos registros voy a insertar podré mostrar un progreso <br>
aproximado.<br>
<br>
Suponiendo que consiga 1100 registros subidos por segundo y que tenga <br>
1.658.900  registros a subir, tendría unos 1508 segundos de proceso
(unos <br>
25 minutos).<br>
Seria cuestión de tomar la hora de inicio del proceso, añadir 26 o 27 <br>
(papochiacaso) minutos y hacer correr una barra o similar durante esos
26 <br>
minutos en pequeños intervalos.<br>
<br>
Me gusta la idea Miguel Ángel, muchas gracias.¡¡¡<br>
<br>
<br>
Voy a investigar el tema de las ventanas que comentas¡¡¡<br>
<br>
GRACIAS<br>
<br>
<br>
<br>
<br>
<br>
<br>
José Luis Gilsanz Gómez <br>
Estadística <br>
<br>
Tasaciones Hipotecarias <br>
María de Molina, 54 - 28006 - Madrid<br>
Tel. : 34-914549694<br>
Fax : 34-917822164<br>
Email : jluis.gilsanz@tasacionesh.com <br>
Site web: </font></tt><a href=www.tasacionesh.es><tt><font size=2>www.tasacionesh.es</font></tt></a><tt><font size=2>
<br>
<br>
<br>
<br>
<br>
<br>
-- AVISO LEGAL --<br>
Los datos personales que en esta comunicación aparecen, así como los que
<br>
nuestra empresa mantiene de Vd. y de su empresa, son tratados con la <br>
finalidad de mantener el contacto así como realizar las gestiones que en
<br>
esta aparecen (Ley Orgánica 15/1999, de 13 de diciembre, de Protección
de <br>
Datos de Carácter Personal). <br>
Puede ejercer sus derechos de acceso, rectificación, cancelación y <br>
oposición dirigiéndose a atencion.clientesth@tasacionesh.com.<br>
La utilización de su dirección de correo electrónico por parte de nuestra
<br>
empresa queda sujeta a las disposiciones de la Ley 34/2002, de Servicios
<br>
de la Sociedad de la Información y el Comercio Electrónico. Si Vd. recibe
<br>
comunicación comercial por nuestra parte y desea dejar de recibirla, <br>
rogamos nos lo comunique por vía electrónica a través de la dirección <br>
atencion.clientesth@tasacionesh.com . <br>
<br>
<br>
<br>
<br>
<br>
RE: [R-es] Barra de progreso en RODBC<br>
<br>
(Internet)<br>
miguel.angel.rodriguez.muinos <br>
<br>
<br>
To:<br>
Jluis GILSANZ<br>
Cc:<br>
r-help-es<br>
<br>
05/04/2013 11:33<br>
<br>
<br>
<br>
<br>
<br>
Hola José Luis.<br>
 <br>
Se me ocurre una cosa que puede valerte (aunque no es demasiado ?fino?)?.<br>
Puedes crear una ventana en la que pintes una barra animada (e, incluso
un <br>
contador y/o cronómetro)? la activas justo antes de lanzar la petición
y <br>
la desactivas cuando se devuelva el control a R.<br>
Así el usuario verá algo en pantalla mientras espera y no tendrá esa <br>
sensación de que el proceso ?se colgó?.<br>
 <br>
Eso te valdría?<br>
 <br>
NOTA: En tu proceso de una hora, podrías ponerles mejor unos videos <br>
musicales!<br>
J<br>
 <br>
Un saludo,<br>
Miguel.<br>
 <br>
 <br>
 <br>
 <br>
 <br>
De: r-help-es-bounces@r-project.org [<br>
</font></tt><a href="mailto:r-help-es-bounces@r-project.org"><tt><font size=2>mailto:r-help-es-bounces@r-project.org</font></tt></a><tt><font size=2>]
En nombre de <br>
jluis.gilsanz@tasacionesh.com<br>
Enviado el: viernes, 05 de abril de 2013 11:16<br>
Para: cgb@datanalytics.com<br>
CC: r-help-es@r-project.org; gilbellosta@gmail.com<br>
Asunto: Re: [R-es] Barra de progreso en RODBC<br>
Importancia: Alta<br>
 <br>
Hola de nuevo: <br>
<br>
Ahora creo que he conseguido explicarme bien, esos callbacks de RODBC a
R <br>
era justo lo que necesitaba para mostrar el progreso. <br>
Pero como RODBC no los tiene, mi gozo en un pozo :-( <br>
<br>
La opción de partir los datos en varios lotes ya la había sopesado pero
<br>
teniendo en cuenta que esto era una especie de refinamiento del código
no <br>
me merece la pena. <br>
Seguiré ejecutando la query directamente en el MSSQL para saber cuantos
<br>
registros han subido como hacia hasta ahora. <br>
<br>
<br>
Muchas gracias por vuestra ayuda. <br>
<br>
Un saludete <br>
<br>
<br>
<br>
<br>
<br>
<br>
<br>
Re: [R-es] Barra de progreso en RODBC<br>
 <br>
<br>
<br>
(Internet) <br>
cgb <br>
<br>
<br>
<br>
To: <br>
Jluis GILSANZ <br>
Cc: <br>
r-help-es<br>
<br>
04/04/2013 16:14<br>
 <br>
<br>
<br>
Sent by : gilbellosta@gmail.com <br>
<br>
<br>
 <br>
<br>
<br>
<br>
<br>
Hola, ¿qué tal?<br>
<br>
La única manera en que podrías conseguir lo que quieres es que el<br>
_driver_ de ODBC proporcionara _callbacks_ a R (para indicarle, por<br>
ejemplo, por dónde va en la tarea encomendada). Pero no es el caso.<br>
<br>
Una vez que llamas a sqlFetch o sqlSave, R pierde el control de lo que<br>
pasa hasta que el _driver_ decide que ha terminado de hacer lo que se<br>
le ha encomendado.<br>
<br>
La única manera de disponer de barras de progreso sería partiendo la<br>
captura e inserción de datos en bloques para actualizarla tú a mano.<br>
<br>
Un saludo,<br>
<br>
Carlos J. Gil Bellosta<br>
</font></tt><a href=http://www.datanalytics.com/><tt><font size=2>http://www.datanalytics.com</font></tt></a><tt><font size=2><br>
<br>
<br>
<br>
El día 4 de abril de 2013 10:34,  <jluis.gilsanz@tasacionesh.com>
<br>
escribió:<br>
> Hola de nuevo a todos:<br>
><br>
> Soy José Luis, Miguel Ángel ;-)<br>
><br>
><br>
> En las tres opciones que me habéis proporcionado tanto tu mismo como
<br>
Carlos,<br>
> las barras de progreso se aplican a procesos iterativos bien sean
bucles <br>
o<br>
> bien funciones tipo apply.<br>
><br>
><br>
> En mi caso tanto la importación de la Excel como la exportación al
MSSQL <br>
se<br>
> hacen en una sola instrucción sin utilizar ni bucles ni funciones
tipo<br>
> apply.Aunque supongo que internamente RODBC leerá/escribirá los datos
de<br>
> forma iterativa en ambas instrucciones la subida/bajada de datos en
R se<br>
> hace "del tirón".<br>
><br>
> Es decir la primera barra de progreso debería mostrar el progreso
del <br>
numero<br>
> de registros leídos hasta ese momento vs el numero total de registros
en <br>
la<br>
> instruccion:<br>
> XLS2010 <- sqlFetch(xls, "2010")<br>
><br>
> La segunda barra de progreso debería mostrar el progreso del numero
de<br>
> registros insertados en la tabla SQL  hasta ese momento vs el
numero <br>
total<br>
> de registros del df datos en la instrucción:<br>
> sqlSave(channel,datos,tablename ="Poblacion", rownames =
FALSE, <br>
append=TRUE,<br>
> fast=TRUE )<br>
><br>
> No sé si consigo explicarme con propiedad.<br>
><br>
> Muchas gracias por los aportes<br>
><br>
> Un saludo<br>
><br>
><br>
><br>
><br>
><br>
><br>
> Re: [R-es] Barra de progreso en RODBC<br>
><br>
> (Internet)<br>
> cof<br>
> To: miguel.angel.rodriguez.muinos<br>
> Cc: Jluis GILSANZ, r-help-es<br>
><br>
> 03/04/2013 17:02<br>
><br>
><br>
><br>
> ________________________________<br>
><br>
><br>
><br>
> Hola,<br>
><br>
> Hay alguna más...:<br>
><br>
> </font></tt><a href="http://cran.r-project.org/web/packages/pbapply/pbapply.pdf"><tt><font size=2>http://cran.r-project.org/web/packages/pbapply/pbapply.pdf</font></tt></a><tt><font size=2><br>
><br>
> Y otra en el paquete plyr:<br>
><br>
> </font></tt><a href="http://cran.r-project.org/web/packages/plyr/plyr.pdf"><tt><font size=2>http://cran.r-project.org/web/packages/plyr/plyr.pdf</font></tt></a><tt><font size=2><br>
><br>
> Saludos,<br>
> Carlos Ortega<br>
> </font></tt><a href=www.qualityexcellence.es><tt><font size=2>www.qualityexcellence.es</font></tt></a><tt><font size=2><br>
><br>
><br>
> El 3 de abril de 2013 14:33, <miguel.angel.rodriguez.muinos@sergas.es><br>
> escribió:<br>
> Hola jluis (probablemente, José o Juan Luis).<br>
><br>
> A ver si esto te sirve...<br>
><br>
> <br>
</font></tt><a href="http://ryouready.wordpress.com/2009/03/16/r-monitor-function-progress-with-a-progress-bar/"><tt><font size=2>http://ryouready.wordpress.com/2009/03/16/r-monitor-function-progress-with-a-progress-bar/</font></tt></a><tt><font size=2><br>
<br>
><br>
> Un saludo,<br>
> _____________________________<br>
> Miguel Ángel Rodríguez Muíños<br>
> Dirección Xeral de Innovación e Xestión da Saúde Pública<br>
> Consellería de Sanidade<br>
> Xunta de Galicia<br>
> </font></tt><a href=http://dxsp.sergas.es/><tt><font size=2>http://dxsp.sergas.es</font></tt></a><tt><font size=2><br>
><br>
><br>
><br>
><br>
><br>
><br>
> De: r-help-es-bounces@r-project.org [<br>
</font></tt><a href="mailto:r-help-es-bounces@r-project.org"><tt><font size=2>mailto:r-help-es-bounces@r-project.org</font></tt></a><tt><font size=2>]<br>
> En nombre de jluis.gilsanz@tasacionesh.com<br>
> Enviado el: miércoles, 03 de abril de 2013 13:40<br>
> Para: r-help-es@r-project.org<br>
> Asunto: [R-es] Barra de progreso en RODBC<br>
><br>
> Hola:<br>
><br>
> Me encuentro en la tesitura de hacer el siguiente proceso:<br>
> 1-.Leer una excel e importar los datos a R<br>
> 2-.Transformar esos datos mediante R<br>
> 3.-Subir esos datos transformados a MS SQL server.<br>
><br>
> El proceso en si lo tengo completado sin problemas, pero me gustaria
<br>
afinar<br>
> un poco mas el codigo y poner una barra de progreso en los pasos 1
y 3.<br>
> En ambos pasos utilizo RODBC para hacer la conexion:<br>
><br>
> En 1- el codigo seria<br>
> xls   <- odbcConnectExcel("Poblacion.xls")<br>
> XLS2010 <- sqlFetch(xls, "2010")<br>
><br>
> Pues bien la instruccion sqlFetch tarda unos 3 o 4 minutos en leer
la <br>
excel<br>
> y me gustaria mostrar una barra de progreso o similar mientras se
<br>
ejecuta.<br>
><br>
><br>
> Tras importar la excel, y luego de varias transformaciones subo el
df<br>
> resultante (llamado datos) mediante<br>
> channel <- odbcDriverConnect( "case=nochange; Driver=SQL Server;<br>
> Server=XXXXXXXX; Database=XXXXXXX; uid=XXXXt; pwd=XXXXt; wsid=XXXXXX;")<br>
> sqlSave(channel,datos,tablename ="Poblacion", rownames =
FALSE, <br>
append=TRUE,<br>
> fast=TRUE )<br>
><br>
> En este caso tarda aproximadamente una hora en la que R parece "muerto".<br>
> Haciendo una consulta contra la tabla Poblacion (en el analizador
de<br>
> consultas de MSSQL) puedo ver en cada momento cuantos registros se
han<br>
> insertado hasta ese momento pero me gustaria que R mostrara una <br>
indicacion<br>
> del estado de la insercion de datos en el Servidor.<br>
><br>
> Muchas gracias<br>
><br>
> ________________________________<br>
> Nota: A información contida nesta mensaxe e os seus posibles documentos<br>
> adxuntos é privada e confidencial e está dirixida únicamente ó seu<br>
> destinatario/a. Se vostede non é o/a destinatario/a orixinal desta
<br>
mensaxe,<br>
> por favor elimínea. A distribución ou copia desta mensaxe non está<br>
> autorizada.<br>
><br>
> Nota: La información contenida en este mensaje y sus posibles documentos<br>
> adjuntos es privada y confidencial y está dirigida únicamente a su<br>
> destinatario/a. Si usted no es el/la destinatario/a original de este<br>
> mensaje, por favor elimínelo. La distribución o copia de este mensaje
no<br>
> está autorizada.<br>
><br>
> See more languages: </font></tt><a href=http://www.sergas.es/aviso_confidencialidad.htm><tt><font size=2>http://www.sergas.es/aviso_confidencialidad.htm</font></tt></a><tt><font size=2><br>
><br>
>         [[alternative HTML version deleted]]<br>
><br>
><br>
> _______________________________________________<br>
> R-help-es mailing list<br>
> R-help-es@r-project.org<br>
> </font></tt><a href="https://stat.ethz.ch/mailman/listinfo/r-help-es"><tt><font size=2>https://stat.ethz.ch/mailman/listinfo/r-help-es</font></tt></a><tt><font size=2><br>
><br>
><br>
><br>
><br>
> --<br>
> Saludos,<br>
> Carlos Ortega<br>
> </font></tt><a href=www.qualityexcellence.es><tt><font size=2>www.qualityexcellence.es</font></tt></a><tt><font size=2><br>
><br>
><br>
> -- AVISO LEGAL --<br>
><br>
> Los datos personales que en esta comunicación aparecen, así como los
que<br>
> nuestra<br>
> empresa mantiene de Vd. y de su empresa, son tratados con la finalidad
<br>
de<br>
> mantener<br>
> el contacto así como realizar las gestiones que en esta aparecen (Ley<br>
> Orgánica<br>
> 15/1999, de 13 de diciembre, de Protección de Datos de Carácter <br>
Personal).<br>
> Puede ejercer sus derechos de acceso, rectificación, cancelación y
<br>
oposición<br>
> dirigiéndose a atencion.clientes@tasacionesh.com<br>
> La utilización de su dirección de correo electrónico por parte de
<br>
nuestra<br>
> empresa<br>
> queda sujeta a las disposiciones de la Ley 34/2002, de Servicios de
la<br>
> Sociedad de<br>
> la Información y el Comercio Electrónico. Si Vd. recibe comunicación<br>
> comercial por<br>
> nuestra parte y desea dejar de recibirla, rogamos nos lo comunique
por <br>
vía<br>
> electrónica<br>
> a través de la dirección atencion.clientes@tasacionesh.com<br>
><br>
><br>
> _______________________________________________<br>
> R-help-es mailing list<br>
> R-help-es@r-project.org<br>
> </font></tt><a href="https://stat.ethz.ch/mailman/listinfo/r-help-es"><tt><font size=2>https://stat.ethz.ch/mailman/listinfo/r-help-es</font></tt></a><tt><font size=2><br>
><br>
<br>
-- AVISO LEGAL -- <br>
Los datos personales que en esta comunicación aparecen, así como los que
<br>
nuestra <br>
empresa mantiene de Vd. y de su empresa, son tratados con la finalidad
de <br>
mantener <br>
el contacto así como realizar las gestiones que en esta aparecen (Ley <br>
Orgánica <br>
15/1999, de 13 de diciembre, de Protección de Datos de Carácter Personal).
<br>
 <br>
Puede ejercer sus derechos de acceso, rectificación, cancelación y <br>
oposición <br>
dirigiéndose a atencion.clientes@tasacionesh.com <br>
La utilización de su dirección de correo electrónico por parte de nuestra
<br>
empresa <br>
queda sujeta a las disposiciones de la Ley 34/2002, de Servicios de la
<br>
Sociedad de <br>
la Información y el Comercio Electrónico. Si Vd. recibe comunicación <br>
comercial por <br>
nuestra parte y desea dejar de recibirla, rogamos nos lo comunique por
vía <br>
electrónica <br>
a través de la dirección atencion.clientes@tasacionesh.com<br>
<br>
Nota: A información contida nesta mensaxe e os seus posibles documentos
<br>
adxuntos é privada e confidencial e está dirixida únicamente ó seu <br>
destinatario/a. Se vostede non é o/a destinatario/a orixinal desta <br>
mensaxe, por favor elimínea. A distribución ou copia desta mensaxe non
<br>
está autorizada.<br>
<br>
Nota: La información contenida en este mensaje y sus posibles documentos
<br>
adjuntos es privada y confidencial y está dirigida únicamente a su <br>
destinatario/a. Si usted no es el/la destinatario/a original de este <br>
mensaje, por favor elimínelo. La distribución o copia de este mensaje no
<br>
está autorizada.<br>
<br>
See more languages: </font></tt><a href=http://www.sergas.es/aviso_confidencialidad.htm><tt><font size=2>http://www.sergas.es/aviso_confidencialidad.htm</font></tt></a><tt><font size=2><br>
<br>
-- AVISO LEGAL -- <br>
<br>
Los datos personales que en esta comunicación aparecen, así como los que
nuestra <br>
empresa mantiene de Vd. y de su empresa, son tratados con la finalidad
de mantener <br>
el contacto así como realizar las gestiones que en esta aparecen (Ley Orgánica
<br>
15/1999, de 13 de diciembre, de Protección de Datos de Carácter Personal).
  <br>
Puede ejercer sus derechos de acceso, rectificación, cancelación y oposición
<br>
dirigiéndose a atencion.clientes@tasacionesh.com <br>
La utilización de su dirección de correo electrónico por parte de nuestra
empresa <br>
queda sujeta a las disposiciones de la Ley 34/2002, de Servicios de la
Sociedad de <br>
la Información y el Comercio Electrónico. Si Vd. recibe comunicación comercial
por <br>
nuestra parte y desea dejar de recibirla, rogamos nos lo comunique por
vía electrónica <br>
a través de la dirección atencion.clientes@tasacionesh.com<br>
------------ próxima parte ------------<br>
Se ha borrado un adjunto en formato HTML...<br>
URL: <</font></tt><a href="https://stat.ethz.ch/pipermail/r-help-es/attachments/20130405/6f13d444/attachment.html"><tt><font size=2>https://stat.ethz.ch/pipermail/r-help-es/attachments/20130405/6f13d444/attachment.html</font></tt></a><tt><font size=2>><br>
------------ próxima parte ------------<br>
A non-text attachment was scrubbed...<br>
Name: no disponible<br>
Type: image/jpeg<br>
Size: 24195 bytes<br>
Desc: no disponible<br>
URL: <</font></tt><a href="https://stat.ethz.ch/pipermail/r-help-es/attachments/20130405/6f13d444/attachment.jpe"><tt><font size=2>https://stat.ethz.ch/pipermail/r-help-es/attachments/20130405/6f13d444/attachment.jpe</font></tt></a><tt><font size=2>><br>
<br>
------------------------------<br>
<br>
_______________________________________________<br>
R-help-es mailing list<br>
R-help-es@r-project.org<br>
</font></tt><a href="https://stat.ethz.ch/mailman/listinfo/r-help-es"><tt><font size=2>https://stat.ethz.ch/mailman/listinfo/r-help-es</font></tt></a><tt><font size=2><br>
<br>
<br>
Fin de Resumen de R-help-es, Vol 50, Envío 14<br>
*********************************************<br>
</font></tt>
<br><p><br>
-- AVISO LEGAL -- </p>

<p>Los datos personales que en esta comunicación aparecen, así como los que nuestra <br>
empresa mantiene de Vd. y de su empresa, son tratados con la finalidad de mantener <br>
el contacto así como realizar las gestiones que en esta aparecen (Ley Orgánica <br>
15/1999, de 13 de diciembre, de Protección de Datos de Carácter Personal).   <br>
Puede ejercer sus derechos de acceso, rectificación, cancelación y oposición <br>
dirigiéndose a atencion.clientes@tasacionesh.com <br>
La utilización de su dirección de correo electrónico por parte de nuestra empresa <br>
queda sujeta a las disposiciones de la Ley 34/2002, de Servicios de la Sociedad de <br>
la Información y el Comercio Electrónico. Si Vd. recibe comunicación comercial por <br>
nuestra parte y desea dejar de recibirla, rogamos nos lo comunique por vía electrónica <br>
a través de la dirección atencion.clientes@tasacionesh.com</p>