tener tan tamaño salir saber riñones renal que puede piedras peligroso los litiasis hasta grande expulse expulsar demora cuanto como calculo 9mm 6mm 5mm r performance memory

tamaño - que tan peligroso es tener piedras en los riñones



¿Por qué ralentiza R a medida que pasa el tiempo, cuando los cálculos son los mismos? (1)

Así que creo que no entiendo muy bien cómo funciona la memoria en R. Me he encontrado con problemas en los que el mismo código se vuelve más lento más adelante en la semana (usando la misma sesión R, a veces incluso cuando borro el espacio de trabajo) . Intenté desarrollar un problema de juguete que creo que reproduce el "efecto de desaceleración" que he estado observando al trabajar con objetos grandes. Tenga en cuenta que el siguiente código requiere un poco de memoria (no ejecute a ciegas este código sin ajustar ny N para que coincida con lo que su configuración puede manejar). Tenga en cuenta que probablemente le tomará entre 5 y 10 minutos antes de comenzar a ver este patrón de ralentización (posiblemente incluso más).

N=4e7 #number of simulation runs n=2e5 #number of simulation runs between calculating time elapsed meanStorer=rep(0,N); toc=rep(0,N/n); x=rep(0,50); for (i in 1:N){ if(i%%n == 1){tic=proc.time()[3]} x[]=runif(50); meanStorer[i] = mean(x); if(i%%n == 0){toc[i/n]=proc.time()[3]-tic; print(toc[i/n])} } plot(toc)

meanStorer es ciertamente grande, pero está preasignado, así que no estoy seguro de por qué el ciclo se ralentiza con el paso del tiempo. Si elimino mi espacio de trabajo y vuelvo a ejecutar este código, ¡comenzará tan lento como los últimos cálculos! Estoy usando Rstudio (en caso de que eso importe). También aquí hay algo de mi información del sistema

  • Sistema operativo: Windows 7
  • Tipo de sistema: 64 bits
  • RAM: 8 gb
  • Versión R: 2.15.1 ($ plataforma produce "x86_64-pc-mingw32")

Aquí hay una gráfica de toc, antes de usar la preasignación para x (es decir, usando x=runif(50) en el ciclo)

Aquí hay un diagrama de toc, después de usar preasignación para x (es decir, usando x[]=runif(50) en el ciclo)

¿No estoy haciendo lo que creo que está haciendo? ¿Qué sucede debajo del capó cuando borro el espacio de trabajo?

Actualización: con la versión más nueva de R (3.1.0), el problema ya no persiste incluso al aumentar N a N = 3e8 (la nota R no permite vectores mucho más grandes que este)

Aunque es bastante insatisfactorio que la solución solo está actualizando R a la versión más nueva, porque no puedo entender por qué hubo problemas en la versión 2.15. Sería bueno saber qué los causó, así que voy a continuar dejando esta pregunta abierta.


Como dice en su pregunta actualizada, la respuesta de alto nivel se debe a que está utilizando una versión anterior de R con un error, ya que con la versión más reciente de R (3.1.0), el problema ya no persiste.