vuelos una suspendidos solidos resueltos probabilidad pequeños para numero mayor introducción ingenieros importantes fosfato estadística estadistica ejercicios distribuciones distribucion desde descarga cortos capitulo aviones aeropuertos r io

resueltos - la descarga de solidos suspendidos desde una mina de fosfato



Acelerar la carga RData (2)

Para variables tan grandes, sospecho que la mayor parte del tiempo se toma dentro del código C interno ( http://svn.r-project.org/R/trunk/src/main/saveload.c ). Puede ejecutar algunos perfiles para ver si estoy en lo cierto. (Todo lo que hace el código R en la función de load es verificar que su archivo no esté vacío y que no esté dañado).

Además de leer las variables en la memoria, éstas (entre otras cosas) deben almacenarse dentro de un entorno R.

La única forma obvia de obtener una gran aceleración en la carga de variables sería reescribir el código de forma paralela para permitir la carga simultánea de variables. Esto presumiblemente requiere una reescritura sustancial de las partes internas de R, así que no contenga la respiración para esa característica.

He comprobado varias preguntas relacionadas como esta

¿Cómo cargar datos rápidamente en R?

Estoy citando parte específica de la respuesta más calificada.

Depende de lo que quiera hacer y de cómo procese más los datos. En cualquier caso, la carga desde un objeto binario R siempre va a ser más rápida, siempre y cuando siempre necesite el mismo conjunto de datos. La velocidad límite aquí es la velocidad de su disco duro, no R. La forma binaria es la representación interna del marco de datos en el espacio de trabajo, por lo que ya no es necesaria la transformación.

Realmente pensé eso. Sin embargo, la vida se trata de experimentar. Tengo un archivo de 1.22 GB que contiene un objeto igraph. Dicho esto, no creo que lo que encontré aquí esté relacionado con la clase de objeto, principalmente porque puede cargar (''archivo.RData'') incluso antes de llamar "biblioteca".

Los discos en este servidor son muy buenos. Como puedes consultar en el tiempo de lectura a memoria.

user@machine data$ pv mygraph.RData > /dev/null 1.22GB 0:00:03 [ 384MB/s] [==================================>] 100% `

Sin embargo cuando carga estos datos de R

>system.time(load(''mygraph.RData'')) user system elapsed 178.533 16.490 202.662

Por lo tanto, parece que cargar archivos * .RData es 60 veces más lento que los límites del disco, lo que debería significar que R hace algo mientras "carga".

Tengo la misma sensación al usar diferentes versiones R con hardware diferente, es solo que esta vez tuve paciencia para realizar evaluaciones comparativas (principalmente porque con un almacenamiento de disco tan genial, fue terrible el tiempo que tarda la carga)

¿Alguna idea sobre cómo superar esto?

Después de ideas en respuestas.

save(g,file="test.RData",compress=F)

Ahora el archivo es 3.1GB contra 1.22GB antes. En mi caso, la carga de descomprimir es un poco más rápida (el disco no es mi cuello de botella por mucho)

> system.time(load(''test.RData'')) user system elapsed 126.254 2.701 128.974

La lectura del archivo sin comprimir en la memoria tarda unos 12 segundos, por lo que confirmo que la mayoría del tiempo se invierte en configurar el entorno.

Volveré con los resultados de RDS, suena interesante

Aqui estamos, como hemos comentado.

system.time(saveRDS(g,file="test2.RData",compress=F)) user system elapsed 7.714 2.820 18.112

Y obtengo un 3.1GB como "guardar" sin comprimir, aunque md5sum es diferente, probablemente porque save también almacena el nombre del objeto

Ahora leyendo ...

> system.time(a<-readRDS(''test2.RData'')) user system elapsed 41.902 2.166 44.077

Entonces, combinar ambas ideas (descomprimir y RDS) se ejecuta 5 veces más rápido. Gracias por tus contribuciones!


save compresas de forma predeterminada, por lo que se necesita tiempo adicional para descomprimir el archivo. Luego se tarda un poco más en cargar el archivo más grande en la memoria. Su ejemplo pv es simplemente copiar los datos comprimidos en la memoria, lo que no es muy útil para usted. ;-)

ACTUALIZAR:

Probé mi teoría y fue incorrecta (al menos en mi máquina con Windows XP con 3.3GHz de CPU y 7200RPM HDD). La carga de archivos comprimidos es más rápida (probablemente porque reduce la E / S del disco).

El tiempo extra se gasta en RestoreToEnv (en saveload.c ) y / o R_Unserialize (en serialize.c ). Por lo tanto, podría hacer que la carga sea más rápida cambiando esos archivos, o tal vez usando saveRDS para guardar individualmente los objetos en myGraph.RData luego de alguna manera usar loadRDS en múltiples procesos R para cargar los datos en la memoria compartida ...