我怎样才能使 R 的输出更详细,以便让我确信它还没有损坏?
How can I make R's output more verbose so as to reassure me that it hasn't broken yet?
我经常 运行 代码会占用大量 RAM,并且可能需要长达一个小时才能给出输出。通常,我会花半小时 运行 编写这样的代码,然后我会担心出现问题。有什么办法可以让 R 向我保证还没有任何错误吗?我想我可以将里程碑放入代码本身,但我想知道 R(或 RStudio)中是否有任何东西可以在 运行 时间自动完成这项工作。例如,查看代码使用了多少内存会很方便,因为这样一来,每当我看到内存使用量发生显着变化时,我就会确信它仍在工作。
如果您是 运行 RStudio 中的 R 脚本文件,请使用 "Source with Echo" 选择(Ctrl+Shift+Enter,或通过下拉菜单)。
一种方法是:
- 制作一个包含所有内容的独立文件运行,
- 采购它并在代码完成时收到警告,可能有错误。
下面的小函数warn_me
:
- 运行s 源文件位于“路径”
- 可能会捕获错误,如果存在错误
- 运行结束时播放声音
- 发送电子邮件报告 运行 的状态:成功或失败
- 可选:播放声音直到您停止播放,这样您就不会错过它的结束
这里是:
warn_me = function(path, annoying = FALSE){
# The run
info = try(source(path))
# Sound telling it's over
library(beepr)
beep()
# Send an email with status
library(mailR)
msg = if(inherits(info, "try-error")) "The run failed" else "It's over, all went well"
send.mail(from = "me@somewhere.com",
to = "me@somewhere.com",
subject = msg,
body = "All is in the title.",
smtp = list(host.name = "smtp.mailtrap.io", port = 25,
user.name = "********",
passwd = "******", ssl = TRUE),
authenticate = TRUE,
send = TRUE)
if(annoying){
while(TRUE){
beepr::beep()
Sys.sleep(1)
}
}
}
warn_me(path)
我自己没有测试包 mailR
,但是任何电子邮件发送包都可以。请参阅此 excellent page on sending emails in R 了解替代方案。
你可能会喜欢我的包裹 {boomer}.
如果您 rig()
您的函数,它的所有调用都将在代码执行时展开并打印出来。
例如
# remotes::install_github("moodymudskipper/boomer")
fun <- function(x) {
x <- x + 1
Sys.sleep(3)
x + 1
}
library(boomer)
# rig() the function and all the calls will be exploded
# and displayed as they're run
rig(fun)(2)
我经常 运行 代码会占用大量 RAM,并且可能需要长达一个小时才能给出输出。通常,我会花半小时 运行 编写这样的代码,然后我会担心出现问题。有什么办法可以让 R 向我保证还没有任何错误吗?我想我可以将里程碑放入代码本身,但我想知道 R(或 RStudio)中是否有任何东西可以在 运行 时间自动完成这项工作。例如,查看代码使用了多少内存会很方便,因为这样一来,每当我看到内存使用量发生显着变化时,我就会确信它仍在工作。
如果您是 运行 RStudio 中的 R 脚本文件,请使用 "Source with Echo" 选择(Ctrl+Shift+Enter,或通过下拉菜单)。
一种方法是:
- 制作一个包含所有内容的独立文件运行,
- 采购它并在代码完成时收到警告,可能有错误。
下面的小函数warn_me
:
- 运行s 源文件位于“路径”
- 可能会捕获错误,如果存在错误
- 运行结束时播放声音
- 发送电子邮件报告 运行 的状态:成功或失败
- 可选:播放声音直到您停止播放,这样您就不会错过它的结束
这里是:
warn_me = function(path, annoying = FALSE){
# The run
info = try(source(path))
# Sound telling it's over
library(beepr)
beep()
# Send an email with status
library(mailR)
msg = if(inherits(info, "try-error")) "The run failed" else "It's over, all went well"
send.mail(from = "me@somewhere.com",
to = "me@somewhere.com",
subject = msg,
body = "All is in the title.",
smtp = list(host.name = "smtp.mailtrap.io", port = 25,
user.name = "********",
passwd = "******", ssl = TRUE),
authenticate = TRUE,
send = TRUE)
if(annoying){
while(TRUE){
beepr::beep()
Sys.sleep(1)
}
}
}
warn_me(path)
我自己没有测试包 mailR
,但是任何电子邮件发送包都可以。请参阅此 excellent page on sending emails in R 了解替代方案。
你可能会喜欢我的包裹 {boomer}.
如果您 rig()
您的函数,它的所有调用都将在代码执行时展开并打印出来。
例如
# remotes::install_github("moodymudskipper/boomer")
fun <- function(x) {
x <- x + 1
Sys.sleep(3)
x + 1
}
library(boomer)
# rig() the function and all the calls will be exploded
# and displayed as they're run
rig(fun)(2)