ticks plots mtext r

plots - r plot scale



¿Cambiar el prefijo predeterminado y el prefijo de línea de salida en R? (9)

Con el propósito de enseñar y preparar instrucciones escritas sobre R, una de las cosas que siempre me frustra es que no puedo simplemente copiar los comandos y los resultados de R y pegarlos en otra sesión R. Por ejemplo, si hago algo trivial, como

> x <- rnorm(10) > x [1] 1.76975998 1.19722850 -0.39274507 -1.10979974 0.52320473 -0.08643833 [7] 0.94437690 0.08083207 0.62260363 1.89305469

Si copio y pego eso en un documento o incluso aquí en esta publicación, usted (y mis alumnos) no pueden resaltarlo, copiarlo y pegarlo en una sesión R con éxito.

> > x <- rnorm(10) Error: syntax error > > x Error: syntax error > [1] 1.76975998 1.19722850 -0.39274507 -1.10979974 0.52320473 -0.08643833 Error: syntax error > [7] 0.94437690 0.08083207 0.62260363 1.89305469 Error: syntax error

Es posible que desee hacer esto para probar su instalación de R, comparar mi salida con la suya o simplemente para hacer uso de una función que he ofrecido.

Por lo tanto, lo que me gustaría poder hacer es cambiar la solicitud predeterminada de> a una cadena vacía o un espacio en blanco y también prefijar todas las líneas de salida con una marca #. De esa manera, podría usar R interactivamente para generar una sesión que se parece a

x <- rnorm(10) x # [1] 1.76975998 1.19722850 -0.39274507 -1.10979974 0.52320473 -0.08643833 # [7] 0.94437690 0.08083207 0.62260363 1.89305469

que podría ser copiado / pegado en una sesión R con éxito. Haría que la preparación del código R para un artículo de una revista, estudiantes, conferencias, etc. sea mucho más fácil para mí (y quizás para otros).

He hurgado en la documentación sin suerte ... ¿alguna idea? punteros?

Actualmente, estoy usando R en una Mac mediante la interfaz gráfica de usuario de R.app o desde Terminal.


En cuanto a cambiar el indicador, el comando que está buscando es options , con argumento, que encontré here .

> options(prompt = "# Customized R Prompt!/n") # Customized R Prompt! 1 + 5 [1] 6 # Customized R Prompt!

Establecer la solicitud a una cadena vacía da como resultado:

> options(prompt="") Error in options(prompt = "") : invalid value for ''prompt''

Por eso usé un comentario. Por lo que puedo decir, R no tiene comentarios en bloque, por lo que hice un comentario de línea y puse una nueva línea al final, no debería haber problemas si alguien copia su sesión de esa forma.

Todavía estoy buscando un poco el formato de salida aquí ... Hay algo de código en esta publicación de la lista de administración que parece formatear la salida sin los bloques [#], pero seguramente no es bonito.


Entonces, me gustan mucho las soluciones de Jake y Marek. Jake es sencillo, pero no aborda la parte del formato de salida del problema. Marek fue un poco engorroso, así que lo envolví en una función que resultó en

cleanCode <- function() { if (.Platform$OS.type == "unix" && .Platform$pkgType == "mac.binary") { to_edit <- readLines(pipe("pbpaste")) # Mac ONLY solution } else { to_edit <- readLines("clipboard") # Windows/Unix solution } opts <- options() cmdPrompts <- paste("^", opts$prompt, "|^", opts$continue, sep="") # can someone help me here? how to escape the + to //+, as well as other special chars id_commands <- grep("^> |^//+ ", to_edit) # which are command or continuation lines to_edit[id_commands] <- sub("^> |^//+ ", "", to_edit[id_commands]) # remove prompts to_edit[-id_commands] <- paste(" # ", to_edit[-id_commands]) # comment output writeLines(to_edit) }

lo que me permite resaltar y copiar una parte de la sesión interactiva.

Así, por ejemplo, puedo usar esto para copiar

> x <- rnorm(20) > plot(x) > summary(x) Min. 1st Qu. Median Mean 3rd Qu. Max. -2.34000 -0.86010 -0.21940 -0.43340 0.04383 1.06400 > str(x) num [1:20] -1.568 -0.219 -1.951 1.064 0.768 ... > sd(x) [1] 0.8932958

al portapapeles y con una simple llamada a

> cleanCode()

produce una salida tal como

x <- rnorm(20) plot(x) summary(x) # Min. 1st Qu. Median Mean 3rd Qu. Max. # -2.34000 -0.86010 -0.21940 -0.43340 0.04383 1.06400 str(x) # num [1:20] -1.568 -0.219 -1.951 1.064 0.768 ... sd(x) # [1] 0.8932958

que alguien podría rápidamente resaltar y copiar y pegar en una sesión R para ejecutar el código y comparar su salida. Por supuesto, en este caso, obtendrán resultados diferentes, ya que estoy basando el ejemplo en datos aleatorios.

Gracias Jake, Marek y todos los demás ... ¡todas las respuestas han sido útiles!


Esto es bastante antiguo pero, alternativamente, puede escribir su documento usando el paquete knitr . Esto crea un resultado que puede copiar / pegar en una sesión R.


Forma dolorosa es volver a exprimir una salida original. Supongamos que tienes algún código:

x <- rnorm(10) x head(USArrests) lm(y~x+z, data.frame(y=rnorm(10),z=runif(10),x=rbinom(10,2,.5)) )

Puede guardarlo en un archivo y luego usar readLines read to variable. Hago lo mismo, utilizando textConnection en la salida copiada:

to_edit <- readLines(textConnection(" > x <- rnorm(10) > x [1] -0.43409069 -1.05399275 1.53440218 0.05812936 1.62713995 -1.20644184 [7] -0.15698798 -2.36494897 -0.14440292 1.47182117 > > head(USArrests) Murder Assault UrbanPop Rape Alabama 13.2 236 58 21.2 Alaska 10.0 263 48 44.5 Arizona 8.1 294 80 31.0 Arkansas 8.8 190 50 19.5 California 9.0 276 91 40.6 Colorado 7.9 204 78 38.7 > > lm(y~x+z, + data.frame(y=rnorm(10),z=runif(10),x=rbinom(10,2,.5)) + ) Call: lm(formula = y ~ x + z, data = data.frame(y = rnorm(10), z = runif(10), x = rbinom(10, 2, 0.5))) Coefficients: (Intercept) x z -0.6460 0.3678 0.3918 "))

Ahora algunas ediciones:

id_commands <- grep("^> |^//+ ",to_edit) # which are commands or its continuity to_edit[id_commands] <- sub("^> |^//+ ","",to_edit[id_commands]) # remove promt to_edit[-id_commands] <- paste("#",to_edit[-id_commands]) # comment output

Y el resultado es:

> writeLines(to_edit) # you can specify file or write on screen # x <- rnorm(10) x # [1] -0.43409069 -1.05399275 1.53440218 0.05812936 1.62713995 -1.20644184 # [7] -0.15698798 -2.36494897 -0.14440292 1.47182117 head(USArrests) # Murder Assault UrbanPop Rape # Alabama 13.2 236 58 21.2 # Alaska 10.0 263 48 44.5 # Arizona 8.1 294 80 31.0 # Arkansas 8.8 190 50 19.5 # California 9.0 276 91 40.6 # Colorado 7.9 204 78 38.7 lm(y~x+z, data.frame(y=rnorm(10),z=runif(10),x=rbinom(10,2,.5)) ) # # Call: # lm(formula = y ~ x + z, data = data.frame(y = rnorm(10), z = runif(10), x = rbinom(10, 2, 0.5))) # # Coefficients: # (Intercept) x z # -0.6460 0.3678 0.3918 #

Funciona pero como he dicho es doloroso.


Hubo una discusión reciente en la lista de correo de r-help con varias funciones de ejemplo para eliminar> del código pegado para imitar el comando "Pegar solo comandos" de la GUI de Windows R.


No estoy seguro de si esto es compatible con todas las plataformas, pero en Windows, puede Copiar, luego haga clic derecho y seleccione "Pegar solo comandos", que hace exactamente lo que necesita. Desafortunadamente, no hay atajo de teclado.


Tengo otras dos sugerencias:

1) Podrías escribir tu código en un archivo de script; entonces usted puede copiar y pegar el código sin ningún problema.

Desde la GUI estándar de R, vaya a Archivo> Nuevo script. Ingrese todo el código allí, luego, para ejecutarlo, simplemente resalte el código y presione CTRL-R. Muchas otras R GUI tienen un comportamiento similar. Todavía puedes trabajar interactivamente en este modo; La diferencia clave es que resaltas el código y lo ejecutas en lugar de presionar ENTER.

2) Usa las funciones history() . Ver la ayuda:? Historia. Puedes guardar el historial de tu consola con esto:

savehistory(file = ".Rhistory")

Luego puedes abrirlo como un archivo de script con este comando:

edit(file=".Rhistory")

También es posible que desee cambiar el max.show, posiblemente incluso como el predeterminado en su propio .Rprofile. Por ejemplo,

history(max.show = Inf, reverse = FALSE)


Tu escribes eso

Una de las cosas que siempre me ha frustrado es que no puedo simplemente copiar los comandos y la salida de R y pegarlos en otra sesión de R.

y supongo que estás en Windows con el binario R estándar de Windows. Temo que lo que tienes en mente no sea factible. Pero como lo que quieres hacer es en realidad muy deseable, las personas lo han hecho de una manera diferente. Del manual de ESS :

5 manipulando archivos de transcripción guardados

El modo S inferior registra la transcripción (la lista de todos los comandos ejecutados y su salida) en el búfer de proceso, que se puede guardar como un "archivo de transcripción", que normalmente debería tener el sufijo `.St ''. El uso más obvio para un archivo de transcripción es como un registro estático de las acciones que ha realizado en una sesión S particular. A veces, sin embargo, es posible que desee volver a ejecutar los comandos grabados en el archivo de transcripción enviándolos a un proceso ESS en ejecución. Para esto está el Modo Transcripción.

Si carga el archivo a con el sufijo `.St ''en Emacs, se coloca en el Modo S Transcripción. [...]

Sin embargo, el cambio a Emacs / ESS puede no ser compatible con sus estudiantes. Por lo tanto, para copiar y pegar directamente, lo mejor que puede hacer es envolver las expresiones en dput() primero:

R> set.seed(42) R> x <- rnorm(10) R> x [1] 1.37096 -0.56470 0.36313 0.63286 0.40427 -0.10612 1.51152 -0.09466 2.01842 -0.06271 R> dput(x) c(1.37095844714667, -0.564698171396089, 0.363128411337339, 0.63286260496104, 0.404268323140999, -0.106124516091484, 1.51152199743894, -0.0946590384130976, 2.01842371387704, -0.062714099052421) R>

La última expresión se puede cortar y pegar de nuevo en R.


Usted podría intentar:

options(prompt=" ", continue=" ")

Tenga en cuenta los espacios entre las comillas.

La primera opción hace desaparecer el prompt. El segundo borra el "+" de aparecer en líneas de envoltura largas.