2010-06-19 545 views
8

No puedo encontrar algo en el sentido de un comando de deshacer en R (ni en Una introducción a R ni en R en una Cáscara de nuez). Estoy particularmente interesado en deshacer/eliminar cuando se trata de gráficos interactivos.Deshacer el comando en R

¿Qué enfoques sugieres?

Respuesta

24

Debe tener en cuenta un enfoque diferente que conduce a reproducibles trabajo:

  • Escoja un editor que te gusta y que tiene R apoyo
  • escribir el código en 'fragmentos', es decir, archivos cortos para funciones y luego utilice las funciones del editor/integración R para enviar el código al intérprete R
  • Si comete un error, vuelva a editar el fragmento y ejecútelo de nuevo
  • Siempre tendrá un registro de lo que hizo

Todo esto funciona tremendamente bien en ESS por lo que muchos usuarios experimentados R como este entorno. Pero los editores son una elección subjetiva y personal; otras personas como Eclipse con StatET mejor. También hay otras soluciones para Mac OS X y Windows, y todo esto se ha discutido innumerables veces aquí en SO y en otros lugares como las listas de R.

+1

Me gustaría ofrecer mis dos centavos por esto. Mi editor preferido es Eclipse + StatEt, pero, como dice Dirk, la elección del editor es subjetiva ... – PaulHurleyuk

+0

Me gusta usar Gedit + RGedit. (nunca logramos instalar StatET bajo Fedora desafortunadamente). Así que ahora tenemos 4 centavos;) – nico

+1

Si usted es un usuario de Windows, siempre puede probar Tinn-R. Yo no lo uso, pero he escuchado cosas geniales al respecto. Ahora tenemos 6c. :) –

13

En general, sí adopto la estrategia de Dirk. Debe apuntar a que su código sea un registro completamente reproducible de cómo ha transformado sus datos brutos en resultados.

Sin embargo, si tiene un código complejo, puede llevar mucho tiempo volver a ejecutarlo. He tenido un código que toma más de 30 minutos para procesar los datos (es decir, importar, transformar, fusionar, etc.). En estos casos, una única línea de código que destruye los datos me obligaría a esperar 30 minutos para restaurar mi espacio de trabajo. por los datos de la destrucción de código que quiere decir cosas como:

  • x <- merge(x, y)
  • df$x <- df$x^2

por ejemplo, se funde, en sustitución de una variable existente con una transformación, la eliminación de filas o columnas, y así sucesivamente. En estos casos, es fácil, especialmente cuando primero aprendes R a cometer un error.

Para evitar tener que esperar estos 30 minutos, puedo adoptar varias estrategias:

  • Si estoy a punto de hacer algo donde hay un riesgo de destruir mis objetos activos, voy a copiar el resultado en primer un objeto temporal. Luego comprobaré que funcionó con el objeto temporal y luego lo volveré a reemplazar con el objeto adecuado. por ejemplo, la primera carrera temp <- merge(x, y); cheque que str(temp); head(temp); tail(temp) trabajado y si todo se ve bien x <- merge(x, y)
  • Como es común en la investigación psicológica, que a menudo tienen grandes tramas de datos con cientos de variables y diferentes subconjuntos de casos. Para un análisis dado (p. Ej., Una tabla, una figura, algún texto de resultados), a menudo extraigo solo el subconjunto de casos y variables que necesito en un objeto separado para el análisis y trabajo con ese objeto al preparar y finalizar mi código de análisis. De esta forma, es menos probable que dañe accidentalmente mi marco de datos principal.Esto supone que los resultados del análisis no necesitan volver a introducirse en el marco de datos principal.
  • Si he terminado de realizar una gran cantidad de transformaciones de datos complejas, puedo guardar una copia de los objetos principales del espacio de trabajo. Por ejemplo, save(x, y, z , file = 'backup.Rdata') De esa manera, si me equivoco, solo tengo que volver a cargar estos objetos.
  • df$x <- NULL es una forma práctica de eliminar una variable en una trama de datos que usted no desea crear

Sin embargo, al final todavía ejecutar todo el código desde cero para comprobar que el resultado es reproducible.

+0

Buena respuesta. Sin embargo, tenga en cuenta que gran parte de esto se maneja automáticamente con CacheSweave (o 'knitr'). –

+2

De acuerdo. Dos años después, utilizo el almacenamiento en caché en knitr mucho. –

+0

Sí, supongo que recibo el premio al gravero por resucitar una publicación anterior. 'knitr' ha hecho que el almacenamiento en caché sea mucho más factible. Nunca pude hacer funcionar CacheSweave con pgfSweave. –