我喜欢系统弹出窗口的想法,但这似乎有点棘手,因为在 Windows、Mac 和 Linux 上会运行不同的协议。以下是系统弹出窗口的一些想法。
基本框架
编织时会发生两件事:
- R 在构建文件时遇到错误。
- 文件构建成功
我们可以使用这些事件来触发代码如下:
```{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() 将显示当前正在编织的文件名。
如果他们使用这些信息,很高兴看到人们想出什么食谱。如果您有任何想法,请在 cmets 中分享或将其添加到帖子的末尾。