¿Hay alguna manera de hacer que R emita un pitido / reproduzca un sonido al final de un guión?

Cuando ejecuto scripts R voy a hacer otra cosa en un escritorio diferente. Si no reviso con frecuencia, nunca sé cuándo algo ha terminado. ¿Hay alguna manera de invocar un pitido (como un pitido del sistema) o hacer que R reproduzca un sonido o notifique gruñir a través de algún código al final de mi guión?

alarm() 

Tha función de alarma.

Tengo un paquete ( beepr ) con el único propósito de hacer sonidos de notificación en R que deberían funcionar en múltiples plataformas. Ejecute lo siguiente para instalar beepr y hacer un sonido:

 install.packages("beepr") library(beepr) beep() 

Más información en github: https://github.com/rasmusab/beepr

En MacOSX puedes dejar que la computadora hable:

 system("say Just finished!") 

y también puedes cambiar la voz artificial que hablará:

 system("say -v Kathy Just finished!") 

Puede elegir cualquier voz que esté disponible en su computadora. En Yosemite puede ver qué voces están instaladas en Preferencias del sistema -> Dictado y voz -> Texto a voz .

Debería hacer un tweet cuando esté listo: http://cran.r-project.org/web/packages/twitteR/index.html

alarm no funciona en mi máquina con Windows, así que creé una función que realmente hace ruido.

 beep <- function(n = 3){ for(i in seq(n)){ system("rundll32 user32.dll,MessageBeep -1") Sys.sleep(.5) } } 

Esto claramente solo podría funcionar en Windows, pero no garantizo que incluso se ejecute en una computadora Windows arbitraria. Solo lo probé en mi máquina, pero pensé que lo publicaría en caso de que alguien tuviera el mismo problema con la alarm que yo.

cat (‘¡Hola, mundo! \ a’)

No solo eso, también puedes poner música épica de Youtube cuando el progtwig termine de hacer bucles 🙂 (Para Ubuntu / Debian 🙂

 system("xdg-open 'http://www.youtube.com/watch?v=9jK-NcRmVcw'") 

Utilice shell.exec("url") para abrir algunos clips de YouTube en Windows

Tengo un notificador de terminal instalado en mi Mac para recibir notificaciones de escritorio desde la línea de comandos. A continuación, puede finalizar una llamada al comando system() esta manera (cambie la ruta, obviamente):

 notify <- function(msgString='Message from R', titleString='Message from R', speakIt=FALSE) { cmd <- paste('~/terminal-notifier/terminal-notifier.app/Contents/MacOS/terminal-notifier -message ', '"', msgString, '" -title "', titleString, '"', sep='') system(cmd) if (speakIt) { system(paste('say', msgString)) } } 

Puede llamar a la función de esta manera

 notify("R is done", "Message from R", speakIt=TRUE) 

para obtener un mensaje como este:

enter image description here

Actualización: incluido @ VLC's say command.

O si está usando la distribución GNU / Linux y tiene el módulo pcspkr en la lista negra (el altavoz de la PC siempre me molestaba ), intente combinar el system con alguna notificación auditiva / visual, por ej.

 system("aplay -t wav /usr/share/sounds/phone.wav") # for auditive bell (an I mean it literary) system("zenity --title=\"R script info\" --text=\"Script has finished with zero exit status\" --info") # for GTK dialog 

Puede consultar el manual de zenity si prefiere la alerta en, por ejemplo, área de notificación … Pero, con la función del system , puede hacer casi cualquier cosa: enviar un correo electrónico, ejecutar otro script, reiniciar el equipo, sudo rm -rf *.* , etc. cualquier cosa … y lo digo en serio.

Pero esto solo se aplica SI está ejecutando distribución GNU / Linux (o UNIX); de lo contrario, cumpla con los comandos específicos de Windows, aunque en ese caso, no puedo darle mucha información …

¿Qué tal algo razonablemente independiente del sistema operativo para sistemas operativos con GUI y navegadores web? ¡Incluso funciona en el Servidor RStudio!

browseURL('https://www.youtube.com/watch?v=QH2-TGUlwu4')

Inspirado por beepr , esta es la función que estoy usando actualmente para este tipo de problemas: D

 work_complete <- function() { cat("Work complete. Press esc to sound the fanfare!!!\n") on.exit(beepr::beep(3)) while (TRUE) { beepr::beep(4) Sys.sleep(1) } } 

eche un vistazo a este paquete: RPushBullet

Una interfaz R para el servicio de mensajes Pushbullet que proporciona notificaciones rápidas y eficientes (y transferencia de archivos) entre computadoras, teléfonos y tabletas

RPushbullet es completamente gratuito y multiplataforma. En cuanto a su pregunta, puede usar esta biblioteca para enviar un Push a su navegador, pero obviamente se vuelve increíble cuando necesita algo de lo que puede notificarle mientras está ausente. Además, el creador del paquete R es el mismo del famoso Rcpp, Dirk Eddelbuettel. ¡Diría que vale la pena intentarlo!

¿Qué tal si tocas algo de música?

 shell.exec("foo/Born.to.be.wild.mp3") 

Puede usar el comando notify-send :

 system("notify-send \"R script finished running\"")