我正试图在编织完成后找到接收MacOS警报的方法。理想情况下,这应该在RStudio中按下“Knit”按钮时运行,而不必运行特殊的构建文件。
我认为我可以通过在代码中的某处策略性地插入以下代码来实现:
system('osascript -e \"display notification \\"Knit-Completed\\"\"')
熟悉RStudio knitr界面和knitr的人是否可以指出哪些插入此类代码最实用?
答案 0 :(得分:2)
我喜欢系统弹出窗口的想法,但这似乎有点棘手,因为在Windows,Mac和Linux上运行会有不同的协议。以下是系统弹出窗口的一些想法。
编织时会发生两件事:
我们可以使用这些事件来触发代码,如下所示:
```{r echo = F}
# When R encounters an error
options(error = function(){
#Run your code here
}
)
# When R exits the knitr session
.Last <- function() {
#Run your code here
}
```
此脚本需要放在Rmd文件的开头附近。理想情况下,将其与最初的设置包含在一起,或者将其保存为单独的R文件,然后在项目中包含行source("path_to_file.R")
。
有许多不同的技术可用于创建通知。以下示例显示了一些可以使用的技术,并放置在上面代码中的#Run your code here
位置:
播放声音:如图here所示,最简单的方法是在退出时运行声音:
beepr::beep()
Sys.sleep(1) # This allows time for the sound to run
注意:beepr :: beep(sound = 7)`可能更适合于错误消息:D
Windows上的基本通知:如this指南中所示,您可以创建一个弹出窗口:
system('CMD /C "ECHO The R process has finished running && PAUSE"',
invisible=FALSE, wait=FALSE)
Mac上的通知:this帖子似乎非常有帮助
发送电子邮件:mail包可以发送电子邮件通知。每天最多只能发送20封电子邮件:
mail::sendmail(recipient, subject="Notification from R",
message="Calculation finished!", password="rmail")
跨平台通知:notifier R软件包目前似乎失败了,但它应该允许所有系统上的通知:
library(notifier)
notify(
title = "Your title",
msg = "Add detail here")
)
Mac上的终端通知:This tool可用于从命令行创建通知。我没有Mac,因此无法测试此软件包。
将通知推送至手机:pushoverr package可让您向手机发送通知。功能看起来不错,但看起来你必须支付一些功能。
Pushbullet :RPushbullet可让您与Pushbullet服务进行互动。它提供了跨系统的一系列应用程序,但还没有涵盖Mac。
对于任何基于文本的通知,您可以轻松自定义脚本的输出消息。以下是一些想法:
显示运行时:可以显示运行代码所需的时间:
# Put this at the start of the document
time_start <- Sys.time()
# Add this to the notification code
(Sys.time() - time_start)
显示文件名:knitr::current_input()
将显示正在编织的当前文件名。
如果他们使用这些信息,那么看看人们提出的食谱会很棒。如果您有任何想法,请在评论中分享或将其添加到帖子的末尾。