当我运行R脚本时,我会在另一个桌面上执行其他操作.如果我不经常检查,我永远不知道什么时候完成.有没有办法调用蜂鸣声(如系统蜂鸣声)或让R播放声音或通过脚本末尾的某些代码通知咆哮?
Ras*_*åth 138
我有一个package(beepr),其唯一目的是在R中发出通知声音,这应该可以跨平台工作.运行以下命令安装beepr并发出声音:
install.packages("beepr")
library(beepr)
beep()
Run Code Online (Sandbox Code Playgroud)
更多信息,请访问github:https://github.com/rasmusab/beepr
dei*_*nst 89
alarm()
Run Code Online (Sandbox Code Playgroud)
Tha报警功能.
VLC*_*VLC 55
在MacOSX上,你可以让电脑说话:
system("say Just finished!")
Run Code Online (Sandbox Code Playgroud)
你也可以改变说话的人造声音:
system("say -v Kathy Just finished!")
Run Code Online (Sandbox Code Playgroud)
您可以选择计算机上可用的任何语音.在Yosemite上,您可以在" 系统偏好设置" - >"听写与语音" - >"文字转语音"中查看已安装的语音.
Ken*_*ams 47
你应该有它鸣叫时,它的完成:http://cran.r-project.org/web/packages/twitteR/index.html
Das*_*son 33
alarm 在我的Windows机器上不起作用,所以我创建了一个实际产生噪音的功能.
beep <- function(n = 3){
for(i in seq(n)){
system("rundll32 user32.dll,MessageBeep -1")
Sys.sleep(.5)
}
}
Run Code Online (Sandbox Code Playgroud)
这显然只适用于Windows,但我不保证它甚至可以在任意Windows计算机上运行.我只是在我的机器上进行了测试,但我想我会发布它,以防任何人遇到与alarm我相同的问题.
mpk*_*mpk 28
猫('Hello world!\ a')
mol*_*ean 16
不仅如此,当程序完成循环时,你还可以从Youtube上放一些史诗音乐:)(对于Ubuntu/Debian :)
system("xdg-open 'http://www.youtube.com/watch?v=9jK-NcRmVcw'")
Run Code Online (Sandbox Code Playgroud)
Ste*_*ald 11
更新:
使用macOS 10.9(Mavericks)及更高版本,您可以使用普通的AppleScript发布通知:
theTitle <- "A Title"
theMsg <- "A message here"
cmd <- paste("osascript -e ", "'display notification ", '"', theMsg, '"', ' with title ', '"', theTitle, '"', "'", sep='')
system(cmd)
Run Code Online (Sandbox Code Playgroud)
这消除了安装的需要terminal-notifier,如下所述.
-
我的Mac上安装了终端通知程序,可以从命令行获取桌面通知.然后你可以system()像这样结束对命令的调用(显然改变路径):
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))
}
}
Run Code Online (Sandbox Code Playgroud)
你可以像这样调用这个函数
notify("R is done", "Message from R", speakIt=TRUE)
Run Code Online (Sandbox Code Playgroud)
得到这样的消息:

更新:包含@ VLC的say命令.
对于具有GUI和Web浏览器的操作系统,某些合理的OS独立性如何?它甚至可以在RStudio服务器上运行!
__CODE__
或者,如果您正在使用GNU/Linux发行版并将pcspkr模块列入黑名单(PC扬声器总是令我烦恼),请尝试结合system一些听觉/视觉通知,例如
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
Run Code Online (Sandbox Code Playgroud)
您可以检查zenity手册,如果你喜欢,比方说,通知区域警报......但是,随着system功能,你可以做很多漂亮的事:发送电子邮件,运行一些其他的脚本,重新启动机器,sudo rm -rf *.*等什么?我的意思是.
但这个身高只有IF你正在运行的GNU/Linux(或UNIX)分配,否则,坚持到Windows的特定命令,但在这种情况下,我不能给你多少信息...
受启发beepr,这是我目前用于解决此类问题的功能: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)
}
}
Run Code Online (Sandbox Code Playgroud)
看一下这个包:RPushBullet
Pushbullet消息传递服务的R接口,可在计算机,手机和平板电脑之间提供快速有效的通知(和文件传输)
RPushbullet是完全免费的多平台。至于您的问题,您可以使用此库将“推”发送到浏览器,但是显然,当您需要某些东西时,它比离开时可以通知您的情况变得令人惊讶。而且,R包的创建者与著名的Rcpp Dirk Eddelbuettel相同。我会说值得一试!
小智 5
这个帖子确实很老了,但它仍然是这个问题的最佳 Google 结果之一,并让我使用了 beepr 一段时间。不幸的是,beepr 似乎已被放弃,更不幸的是,它会导致频繁的崩溃(至少在带有 RStudio 的 Windows 10 上)。
幸运的是,自这篇文章发表以来,R 似乎添加了一些功能,使您能够相当轻松地播放声音:
library(audio)
fname = "C:\\sounds\\sound.wav"
sfx <- load.wave(fname)
play(sfx)
Run Code Online (Sandbox Code Playgroud)
然而,这几乎正是 beepr 播放声音的方式,因此它很可能在相同的情况下崩溃。@MikolajM 的解决方案适用于 Windows 10,但它有点不太健壮且更笨重(而且不那么有趣)。对于 Windows,@aL3xa 提出的解决方案似乎是最有前途的,尽管它需要一些预先设置。您需要一个可以从命令行播放声音的程序,例如 VLC。使用 VLC,您需要将其添加到系统路径中。完成此操作后,您可以使用他们建议的相同方法,如下所示:
system("vlc -I dummy --dummy-quiet c:\\sounds\\sound.wav vlc://quit", ignore.stdout = TRUE, ignore.stderr = TRUE)
Run Code Online (Sandbox Code Playgroud)
忽略是可选的,但如果没有它们,命令会返回一些我不希望在控制台中看到的乱码。