调试函数时会话中止

Session aborts when debugging a function

我有一个玩具函数 foo,它只是将 5 添加到变量 x。我有第二个函数,n_foofoo 应用于 n 次。它是这样工作的:

# Load library
library(data.table)

# Dummy function
foo <- function(x){
  x + 5
}

# Apply foo n times
n_foo <- function(x, n){
  Reduce(function(a, b) foo(a), 1:n, init = x)
}

# Dummy data
dt <- data.table(values = 1:10)

# Run foo 5 times
dt[, test := n_foo(.SD, 5)]

# See results
dt
#>     values test
#>  1:      1   26
#>  2:      2   27
#>  3:      3   28
#>  4:      4   29
#>  5:      5   30
#>  6:      6   31
#>  7:      7   32
#>  8:      8   33
#>  9:      9   34
#> 10:     10   35

太棒了!现在,假设有什么不对劲,我想调试 n_foo,我会拔出可靠的 debug 函数。

警告:以下代码可能会使您的会话崩溃。

# Load library
library(data.table)

# Dummy function
foo <- function(x){
  x + 5
}

# Apply foo n times
n_foo <- function(x, n){
  Reduce(function(a, b) foo(a), 1:n, init = x)
}

# Dummy data
dt <- data.table(values = 1:10)

debug(n_foo)

# Run foo 5 times
dt[, test := n_foo(.SD, 5)]

# See results
dt 

生产,

奇怪的是,如果此代码是 运行 使用 reprex,会话 不会 崩溃。为什么此代码会导致致命错误?


编辑:

原来我只能在 RStudio 中产生这个问题,不能在 CLI 中。相应地添加了 RStudio 标签。


R version 4.0.0 (2020-04-24)
Platform: x86_64-apple-darwin17.0 (64-bit)
Running under: macOS Catalina 10.15.5

Matrix products: default
BLAS:   /System/Library/Frameworks/Accelerate.framework/Versions/A/Frameworks/vecLib.framework/Versions/A/libBLAS.dylib
LAPACK: /Library/Frameworks/R.framework/Versions/4.0/Resources/lib/libRlapack.dylib

locale:
[1] en_CA.UTF-8/en_CA.UTF-8/en_CA.UTF-8/C/en_CA.UTF-8/en_CA.UTF-8

attached base packages:
[1] stats     graphics  grDevices utils     datasets  methods   base     

other attached packages:
[1] data.table_1.12.8

loaded via a namespace (and not attached):
[1] compiler_4.0.0 tools_4.0.0   

没有崩溃...但进入调试...

debugging in: n_foo(.SD, 5)
debug at #1: {
    Reduce(function(a, b) foo(a), 1:n, init = x)
}
Browse[2]> 

信息

> sessionInfo()
R version 4.0.2 (2020-06-22)
Platform: x86_64-w64-mingw32/x64 (64-bit)
Running under: Windows 10 x64 (build 19041)

other attached packages:
[1] data.table_1.12.8

rstudio 1.3.959

升级到 RStudio v.1.3.959 后,我无法再重现错误。