更新R与R Studio后,M1 Max设备上Rmarkdown运行远慢于R脚本
问题描述
在M1 Max设备上更新到最新版R和RStudio后,出现R Markdown运行代码的速度远慢于常规R脚本的问题,具体表现为:
- 仅在加载大量数据(如本次测试的3GB数据)时出现性能差异,无大数据加载时两者性能相近;
- 某段代码在R脚本与R Markdown中的耗时对比:
R脚本耗时:
R Markdown耗时:user system Elapsed 0.437 0.037 0.490 user system Elapsed 21.820 0.431 25.243 - 加载tidyverse后运行以下测试代码,R脚本耗时0.02736592秒,R Markdown耗时2.401871秒:
start_time <- Sys.time() mpg %>% mutate(age = if_else(year > 2000, "New", "Old")) %>% group_by(age) %>% summarize(cyl = mean(cyl, na.rm = TRUE)) Sys.time() - start_time
已尝试卸载重装rmarkdown包、重装R、RStudio和Anaconda,问题仍未解决。
可能的解决方案
- 关闭R Markdown自动预览功能:RStudio的实时预览会在代码运行后自动渲染输出,处理大数据时额外消耗资源。打开R Markdown文档后,点击右上角「Preview」旁的下拉菜单,选择「Disable Auto Preview」,再重新运行代码测试。
- 优化代码块chunk选项:给代码块添加
cache=TRUE缓存计算结果,避免重复执行;同时关闭不必要的输出(如echo=FALSE)减少渲染负担,示例:
```{r, cache=TRUE, echo=FALSE} # 你的业务代码
- **用Rosetta 2模式运行RStudio**:Apple Silicon架构下部分R包可能存在适配问题,右键点击应用程序中的RStudio,选择「显示简介」,勾选「使用Rosetta打开」,重启后测试性能。 - **手动管理内存**:在代码运行前后调用`gc()`触发垃圾回收,释放内存空间: ```r start_time <- Sys.time() gc() # 运行前清理内存 mpg %>% mutate(age = if_else(year > 2000, "New", "Old")) %>% group_by(age) %>% summarize(cyl = mean(cyl, na.rm = TRUE)) gc() # 运行后清理内存 Sys.time() - start_time
- 更新/切换knitr版本:knitr是R Markdown的核心渲染包,尝试安装开发版:
install.packages("devtools") devtools::install_github("yihui/knitr")
或回退到稳定版,排查是否为版本兼容性问题。
- 切换到系统默认R环境:避免Anaconda环境干扰,打开RStudio的「Tools」→「Global Options」→「R Version」,选择系统原生安装的R版本(而非Anaconda提供的R)。
内容的提问来源于stack exchange,提问作者Sarab
相关产品推荐
相关产品推荐

