Lorsque j'exécute des scripts R, je fais autre chose sur un autre bureau. Si je ne vérifie pas souvent, je ne sais jamais quand quelque chose est fini. Y a-t-il un moyen d'invoquer un bip (comme un bip système) ou de faire jouer un son par R ou de notifier le grondement via un code à la fin de mon script?
alarm()
La fonction d'alarme.
J'ai un paquetage (beepr
) dans le seul but de faire des sons de notification en R qui devraient fonctionner sur plusieurs plates-formes. Exécutez ce qui suit pour installer beepr et créer un son:
install.packages("beepr")
library(beepr)
beep()
Plus d'infos sur github: https://github.com/rasmusab/beepr
Sur MacOSX, vous pouvez laisser l'ordinateur parler:
system("say Just finished!")
et vous pouvez aussi changer la voix artificielle qui parlera:
system("say -v Kathy Just finished!")
Vous pouvez choisir n'importe quelle voix disponible sur votre ordinateur. Sur Yosemite, vous pouvez voir quelles voix sont installées dans Préférences système -> Dictée et parole -> Text to Speech.
Vous devriez l'avoir Tweet quand c'est fait: http://cran.r-project.org/web/packages/Twitter/index.html
alarm
ne fonctionne pas sur mon ordinateur Windows, j'ai donc créé une fonction qui fait du bruit.
beep <- function(n = 3){
for(i in seq(n)){
system("rundll32 user32.dll,MessageBeep -1")
Sys.sleep(.5)
}
}
Cela ne pourrait évidemment fonctionner que sous Windows, mais je ne garantis pas qu'il fonctionnera même sur un ordinateur Windows arbitraire. Je ne l'ai testé que sur ma machine, mais je me suis dit que je le posterais au cas où quelqu'un aurait le même problème avec alarm
que moi.
chat ('Bonjour tout le monde!\a')
De plus, vous pouvez aussi mettre de la musique épique de Youtube lorsque le programme est terminé en boucle :) (pour Ubuntu/Debian :)
system("xdg-open 'http://www.youtube.com/watch?v=9jK-NcRmVcw'")
METTRE À JOUR:
Avec macOS 10.9 (Mavericks) et versions ultérieures, vous pouvez publier des notifications à l'aide de AppleScript standard:
theTitle <- "A Title"
theMsg <- "A message here"
cmd <- paste("osascript -e ", "'display notification ", '"', theMsg, '"', ' with title ', '"', theTitle, '"', "'", sep='')
system(cmd)
Cela supprime la nécessité d'installer terminal-notifier
, référencé ci-dessous.
-
Terminal-notifier est installé sur mon Mac pour recevoir les notifications du Bureau à partir de la ligne de commande. Vous pouvez ensuite conclure un appel à la commande system()
comme ceci (changez le chemin, évidemment):
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))
}
}
Vous pouvez appeler la fonction comme ceci
notify("R is done", "Message from R", speakIt=TRUE)
pour obtenir un message comme celui-ci:
Mise à jour: inclus la commande say
de VLC.
Veuillez utiliser Shell.exec("url")
pour ouvrir un clip YouTube sous Windows.
Ou, si vous utilisez la distribution GNU/Linux et que le module pcspkr est sur liste noire (le haut-parleur du PC m'a toujours ennuyé), essayez de combiner system
avec une notification auditive/visuelle, par exemple.
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
Vous pouvez vérifier zenity manual si vous préférez être alerté, par exemple dans la zone de notification ... Mais, avec la fonction system
, vous pouvez faire à peu près n'importe quoi: envoyer un email, exécuter un autre script, redémarrer l'ordinateur, Sudo rm -rf *.*
, etc. n'importe quoi ... et je le pense vraiment.
Mais cela ne vaut queSIvous utilisez une distribution GNU/Linux (ou UNIX), sinon, respectez les commandes spécifiques à Windows, bien que dans ce cas, je ne puisse pas vous donner beaucoup d’informations. ..
Inspiré de beepr
, voici la fonction que j'utilise actuellement pour ce type de problèmes: 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)
}
}
Que diriez-vous de jouer de la musique?
Shell.exec("foo/Born.to.be.wild.mp3")
jetez un oeil à ce paquet: RPushBullet
Une interface R avec le service de messagerie Pushbullet qui fournit rapidement et notifications efficaces (et transfert de fichiers) entre ordinateurs, téléphones et tablettes
RPushbullet est totalement gratuit et multi-plateforme. Pour ce qui est de votre question, vous pouvez utiliser cette bibliothèque pour envoyer un Push à votre navigateur, mais cela devient évidemment étonnant lorsque vous avez besoin de quelque chose qui peut vous avertir en votre absence ..__ De plus, le créateur du package R est le même. du bien connu Rcpp, Dirk Eddelbuettel. Je dirais que ça vaut le coup!
Vous pouvez utiliser la commande notify-send
:
system("notify-send \"R script finished running\"")
En raison de ces nombreuses idées, j'ai créé une solution sans accès à Internet, car je travaille avec un client VPN avec Windows. Donc, il joue un son Windows typique, qui est généralement sur n'importe quel système d'exploitation Windows.
#Function with loop, press Esc to stopp
alarm2 <- function(){
while(TRUE){
system("cmd.exe",input="C:/Windows/WinSxS/AMD64_Microsoft-windows-Shell-sounds_31bf3856ad364e35_10.0.17134.1_none_fc93088a1eb3fd11/tada.wav")
Sys.sleep(1)
}
}
alarm3 <- function(){
system("cmd.exe",input="C:/Windows/WinSxS/AMD64_Microsoft-windows-Shell-sounds_31bf3856ad364e35_10.0.17134.1_none_fc93088a1eb3fd11/tada.wav")
Sys.sleep(1)
}