You need to enable JavaScript to run this app.
最新活动
大模型
产品
解决方案
定价
生态与合作
支持与服务
开发者
了解我们

如何获取R包大小及已加载包内存占用?加载包与自定义函数抉择

获取R包大小与已加载包内存占用的方法

刚好之前也纠结过类似的问题,分享两个实用的方法给你:

一、获取已安装R包的磁盘大小(无需查看目录)

不用手动翻文件目录,R自带的工具包就能搞定:

  • 精准获取实际磁盘占用:用tools::package_size(),它会计算指定包在磁盘上的真实占用空间(包括所有关联的帮助文档、数据文件等),返回值单位是字节,转成MB更直观:
    # 查看dplyr包的大小
    dplyr_size <- as.numeric(tools::package_size("dplyr")) / (1024^2)
    cat("dplyr包实际磁盘大小:", round(dplyr_size, 2), "MB\n")
    
  • 批量查看所有已安装包:结合installed.packages()可以快速统计所有包的大小,不过要注意这里的Size字段是包在CRAN上的压缩包大小,和实际安装后的占用有差异:
    # 获取所有已安装包的大小(单位KB),转成MB并排序
    pkg_sizes_mb <- installed.packages(fields = "Size")[, "Size"] / 1024
    sort(pkg_sizes_mb, decreasing = TRUE)[1:10] # 显示前10大的包
    

二、查看已加载/附加包的内存占用

当包被加载到工作区后,会占用内存,两种方法可以查看:

方法1:基础R函数手动统计

无需额外安装包,通过遍历包的环境来计算:

# 获取所有已加载的包(以package:开头的环境)
loaded_pkgs <- grep("^package:", search(), value = TRUE)

# 计算每个包的内存占用(转成MB)
pkg_mem <- sapply(loaded_pkgs, function(pkg) {
  # 列出包内所有对象并累加大小
  total_size <- sum(sapply(ls(pos = pkg), function(obj) {
    object.size(get(obj, pos = pkg))
  }))
  total_size / (1024^2)
})

# 按内存占用从大到小排序输出
sort(pkg_mem, decreasing = TRUE)

方法2:用pryr包快速可视化

pryr是专门做内存分析的工具包,用它能更简洁地查看:

# 首次使用先安装
install.packages("pryr")
library(pryr)

# 直接输出所有已加载对象(包括包)的内存占用
mem_usage()

这个函数会返回一个清晰的列表,不仅包含每个包的内存占用,还会列出工作区里的其他对象,非常直观。


内容的提问来源于stack exchange,提问作者zjzjzj

火山引擎 最新活动