【问题标题】:Run alert on completion of knitr build在完成 knitr 构建时运行警报
【发布时间】:2017-09-20 05:25:09
【问题描述】:

我正在尝试找到一种在编织完成后接收 MacOS 警报的方法。理想情况下,这应该在 RStudio 中按下“Knit”按钮时运行,而无需运行特殊的构建文件。

我假设我可以通过在代码中的某处战略性地插入以下代码来做到这一点:

system('osascript -e \"display notification \\"Knit-Completed\\"\"')

熟悉 RStudio knitr 界面和 knitr 的人能否指出插入此类代码最实用的位置?

【问题讨论】:

标签: r rstudio knitr r-markdown


【解决方案1】:

我喜欢系统弹出窗口的想法,但这似乎有点棘手,因为在 Windows、Mac 和 Linux 上会运行不同的协议。以下是系统弹出窗口的一些想法。

基本框架

编织时会发生两件事:

  1. R 在构建文件时遇到错误。
  2. 文件构建成功

我们可以使用这些事件来触发代码如下:

```{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 可让您将通知发送到您的手机。该功能看起来不错,但似乎您必须为某些功能付费。

PushbulletRPushbullet 可让您与 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 中分享或将其添加到帖子的末尾。

【讨论】:

    猜你喜欢
    • 2020-04-17
    • 1970-01-01
    • 1970-01-01
    • 2017-11-10
    • 1970-01-01
    • 2020-07-24
    • 2016-02-29
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多