我只是在 R 中进行一些涉及大量矩形的常规绘图。我绘制了一个空白画布,然后开始在 for 循环中使用
rect()
函数对它们进行尾随(下面的可重现代码)。
但是,每隔一段时间,在交互模式下,R 会话就会崩溃并出现以下错误
Fatal error: Duplicate keys of type 'DisplayList' were found in a Dictionary.
This usually means either that the type violates Hashable's requirements, or
that members of such a dictionary were mutated after insertion.
Trace/BPT trap: 5
这是一个小故障,它并不是每次都会发生,而是在绘制的几千个矩形中发生。在 Rscript 中绘制时不会发生,仅在交互式会话中发生。
用谷歌搜索了一下,这似乎是 Swift 的错误消息,这让我认为这是使用 Swift 库的 R 的 Mac OS 特定问题。我不得不说,我什至不知道从哪里开始修复它,以及它是 Swift 还是 R 问题。
此 R 代码每隔一次运行就会崩溃
pal <- c("coral", "dodgerblue", "darkseagreen2")
table_with_data <- data.frame(left = 0:9, right = 1:10, bot = rep(0:999, each = 10), top = rep(1:1000, each = 10), col = sample(pal, replace = T, 10000))
plot(NULL, xlim = c(0, 10), ylim = c(0,1000))
for (i in 1:nrow(table_with_data)){
rect(table_with_data$left[i], table_with_data$bot[i], table_with_data$right[i], table_with_data$top[i], col = table_with_data$col[i], border = NA)
}
这是在配备 M1 芯片、运行 OS Sonoma 14.5 和 R 版本 4.2.3 的 MacBook pro 上。
我在 macOS Sonoma 14.5 和 R 版本 4.3.2 (2023-10-31) 上生成 R 图时遇到同样的问题——“Eye Holes”。间歇性失败,除非图表有大量数据,否则“显示列表”每次都会崩溃。重复绘制成功的(稍小)图将在第二次或第三次尝试后崩溃。内存清理工作( gc(), rm(list=ls() )徒劳。相同的 R 代码在 Ubuntu 上运行良好。我的解决方法是让 R 编写一个 postscript 文件,然后用单独的查看器打开它。真的很伤心。