在 R 中的函数内保存单个对象:RData 文件大小非常大

2024-03-22

我试图在 R 中保存修剪后的 GLM 对象(即所有“非必要”特征设置为 NULL,例如残差、prior.weights、qr$qr)。

举个例子,看看我需要执行此操作的最小对象:

print(object.size(glmObject))
168992 bytes
save(glmObject, "FileName.RData")

在全局环境中分配此对象并保存会生成约 6KB 的 RData 文件。

但是,我实际上需要在函数内创建和保存 glm 对象,该对象本身也在函数内。所以代码看起来像这样:

subFn <- function(DT, otherArg, ...){
                 glmObject <- glm(...)
                 save(glmObject,"FileName.RData")
}

mainFn <- function(DT, ...){ 
             subFn(DT, otherArg, ...)
}

mainFn(DT, ...)

尽管对象本身大小相同,但这会导致 RData 文件大得多,大约 20 MB。

所以我知道这是一个环境问题,但我很难准确地查明它是如何发生的以及为什么会发生。生成的文件大小似乎变化很大。我尝试过使用 saveRDS,同样我也尝试过通过

我对 R 环境的理解显然不是很好,如果有人能提出解决这个问题的方法,我将非常感激。谢谢。


公式附加了一个环境。如果这是全局环境或包环境,则不会保存,但如果不是可以重建的环境,则会保存。

glm结果通常包含公式,因此它们可以包含附加到该公式的环境。

你不需要glm来证明这一点。试试这个:

formula1 <- y ~ x
save(formula1, file = "formula1.Rdata")

f <- function() {
   z <- rnorm(1000000)
   formula2 <- y ~ x
   save(formula2, file = "formula2.Rdata")
}
f()

当我运行上面的代码时,formula1.Rdata最终为 114 字节,而formula2.Rdata最终大小为 7.7 MB。这是因为后者捕获了它创建的环境,并且包含大向量z.

为了避免这种情况,请在保存公式之前清理创建公式的环境。不要删除公式引用的内容(因为glm可能需要那些),但一定要删除不相关的东西(比如z在我的例子中)。看:

g <- function() {
   z <- rnorm(1000000)
   formula3 <- y ~ x
   rm(z)
   save(formula3, file = "formula3.Rdata")
}
g()

这给出了formula3.Rdata144 字节。

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

在 R 中的函数内保存单个对象:RData 文件大小非常大 的相关文章

  • R rvest 检索空表

    我正在尝试两种策略来从网络表中获取数据 library tidyverse library rvest webpage lt read html https markets cboe com us equities market stati
  • 导出“函数”类对象的 S3 方法

    函数对象似乎与 S3 方法的调度配合得很好 但由于某种原因 它们无法导出到 NAMESPACE 文件中 下面的代码适用于调度到 function method as abc function x UseMethod as abc as ab
  • 在 R 4.0.2 中安装 rsvg 库 (conda-forge)

    我在下载 r 包时遇到困难rsvg 我首先使用 conda 为最新的 R 版本 4 0 2 创建了一个环境 如下所示指示 https anaconda org conda forge r base 我能够毫无问题地下载许多其他 R 包和生物
  • R Shiny - 将 csv 下载到工作目录

    我有一个 Shiny 应用程序 我想在其中完成以下任务 1 用户按下按钮 2 数据框导出为 csv 保存在工作目录 包含 server R 和 ui R 中 或者最好保存在下一级目录中 我希望这种情况自动发生 因为最终我会将其与 check
  • R/d3heatmap/shiny - 有没有办法在 d3 工具提示中嵌入图像?

    我想在滚动单元格时在 d3 工具提示中嵌入图像 而不是默认的行 列 值数据 library shiny library d3heatmap ui lt shinyUI fluidPage titlePanel Old Faithful Ge
  • 在R中使用grepl完成单词匹配

    考虑以下示例 gt testLines lt c I don t want to match this This is what I want to match gt grepl is testLines gt 1 TRUE TRUE 不过
  • 按 ID 合并两个不均匀的数据框并填充缺失值

    我是 r 新手 这是我的第一个论坛问题 我正在尝试合并两个数据集 如下所示 df1 lt data frame ID letters 1 5 x 5 9 y c NA 6 5 NA NA gt df1 ID x y 1 a 5 NA 2 b
  • 抑制 R 中的安装输出

    这真的开始让我烦恼 我尝试了几种方法 但似乎都不起作用 我正在从一个函数运行安装 该函数会生成许多我想抑制的不必要的消息 但我尝试执行此操作的所有方法都不起作用 我试图抑制的代码是 install github ROAUth duncant
  • 区分缺失值类型(无响应与跳过模式)

    对于可能没有仔细阅读密码本的数据集用户 您会建议如何区分缺失值类型 在这个玩具示例中 q2只询问那些回答 是 的人q1 这意味着有一个缺失值q2因为该人没有回应而缺失 并且有两个缺失值q2因为没有提出问题所以丢失了 library tidy
  • 如何删除 R 中字符向量中字符串的公共部分?

    假设一个字符向量如下 file1 p1 analysed samples txt file1 p1 raw samples txt f2 file2 p1 analysed samples txt f3 file3 p1 raw sampl
  • 使用不同时区的 POSIXct 到数字

    我想我一定不明白 POSIXct 是如何工作的 或者什么的 据我了解 它是自纪元以来的秒数 纪元是标准时间 例如 1970 01 01 GMT 我取两个 POSIXct 时间 一个在 EST 一个在 PST 它们是相同的绝对时间 然而 当我
  • 是否有 R 函数将 p.value 转换为显着性代码?

    summary显示 p values 的显着性代码 是否有 R 函数将 p value 转换为显着性代码 例如 0 02 gt 和 0 005 gt Use symnum如下所示 symnum了解更多信息 p values lt c 9 5
  • 使用具有唯一订单号但重复订单组合的 arules 包的 R 篮子分析

    使用具有唯一订单号但重复订单组合的 arules 包进行 R 篮子分析 刚刚学习 R 我正在尝试使用 arules 包进行购物篮分析 但我完全接受任何其他包建议 来比较所购买的 6 种不同商品类型的所有可能组合 我的原始数据集如下所示 Or
  • 如何将表达式传递给ggplot中的geom_text标签? (继续)

    这是我的后续原问题 https stackoverflow com questions 63813557 how to pass an expression to a geom text label in ggplot了解如何将带下标的表达
  • 如何访问 RStudio 中的脚本/源历史记录?

    我想访问 RStudio 源面板中输入内容的历史记录 我对我们学习和输入代码的方式感兴趣 我想分析的三件事是 i 一个人输入代码的方式 ii 不同的人如何输入代码 iii 初学者提高打字的方式 作为第一次尝试 以这种方式获取命令的历史记录是
  • 如何使用ggplot2在地图上添加经度和纬度线?

    我现在正在使用绘制加拿大地图ggplot2 因为默认的投影方式是 aea 阿尔伯斯等积 所以地图上的经度和纬度都是直线 我想知道如何在地图上以 110W 100W 90W 和 50N 60N 70N 的形式显示经度和纬度 它们应该是曲线 多
  • 无法在转换中使用 `fill = NA`

    我收到以下错误 dcast rep data country variable mean fill NA Error in vapply indices fun default values must be type logical but
  • 对shinyTable进行子集化

    我目前正在玩shinyTable这是一个shinyHandsonTable 的兼容实现 https github com trestletech shinyTable https github com trestletech shinyTa
  • 将闪亮应用程序部署到 Shinyapps.io 时出错

    我有一个闪亮的应用程序 它在server R file library shiny Creating the app library ggplot2 library plyr library reshape2 library scales
  • 创建相反方向的水平条形图

    我正在尝试在 R 中做一个金字塔 类似 的情节 我想我已经很接近了 我知道有诸如plotrix之类的功能金字塔图 https www rdocumentation org packages plotrix versions 3 6 6 to

随机推荐

  • GitLab CI 启用 SCP

    我目前正在使用 GitLab com 上的共享运行器之一 是否可以设置 gitlab ci yaml 文件 以便构建可以将 SCP 文件从远程服务器传输到运行器上 我的目标是 SCP 文件 这些文件是我的构建所必需的依赖项 但它们不会在任何
  • C 数组中的指针递增

    我试图理解下面的程序 具体来说 定义cur name以及指针的递增cur age在 printf 语句中 cur age i 必须索引数组中的每个整数 但我希望它指向内存中的连续地址 而不是给定 int 的下一个整数是 4 个字节 即为什么
  • ASP.NET MVC:可用路由数据的 Uri

    我的问题很简单 我有一个 Uri 我想弄清楚它映射到哪个路由 这样我就可以对路由的各个部分进行一些检查 控制器 操作等 如何从 Uri 转到 RouteData 或 Route 根据 tvanfosson 的指导 我想出了一个可以满足我需要
  • 测试 Bash 函数返回值的正确方法是什么?

    我想测试 Bash 函数的返回值if像这样的声明 if func arg then 但我收到如下错误消息 conditional binary operator expected 这样做的正确方法是什么 是下面这个吗 if func arg
  • 字符串未被识别为有效的日期时间

    我收到此错误 字符串未被识别为有效的日期时间 代码如下 DateTimeOffSet dt new DateTimeOffset Convert ToDateTime DateTime Now ToString dd MM yyyy hh
  • 使用 Service Worker 和推送通知做出反应

    一些初步考虑 react 16 8 2 react scripts 2 1 5 我创建了一个新的反应应用程序 我需要实现推送通知 下列的this https developers google com web fundamentals co
  • Go 保证地址不变吗?

    给定一个对象obj有保证吗 uintptr unsafe Pointer obj 无论何时调用 都会计算出相同的值 当然 Go 保证如果你使用两个指向同一个对象的指针 它们总是比较相等 不过 实现可能会移动内存中的对象并透明地更新指向它的所
  • 什么是会话和会话变量?

    您能指导我什么是会话和会话变量吗 我不需要比较 ASP 会话和 ASP NET 会话 因为我对 ASP 一无所知 我也看过很多关于会话类型的文章 但我仍然无法正确理解 ASP NET 中什么是会话以及什么是会话变量 会话 是跟踪每个用户的请
  • PHP:Html 以 html 格式发送电子邮件

    我正在遵循教程http css tricks com sending nice html email with php http css tricks com sending nice html email with php 以 html
  • 获取 RFECV scikit-learn 中的功能

    受此启发 http scikit learn org stable auto examples feature selection plot rfe with cross validation html sphx glr auto exam
  • 如何在 Rails 3.1 中初始化 ActionDispatch::ParamsParser?

    我的应用程序为其 Rest 接口定义了一个自定义 Mime 类型 所以我将其注册在mime types rb初始化器 Mime Type register application vnd example app v1 xml xml v1
  • 当所有线程完成时

    这是我第一次真正尝试使用多线程 我想知道如何判断所有任务组何时完成运行 for int i 0 i lt taskGroups Count i ThreadStart t delegate RunThread taskGroups i ne
  • 自定义 jQuery-File-Upload(基本插件)

    我碰到jQuery 文件上传 https github com blueimp jQuery File Upload在谷歌搜索中 我发现它很简洁 正是我所需要的 但我遇到了一个小问题 即使用基本插件按照我希望的方式获取几个功能 我认为基本插
  • 如何将日期输入和时间输入视为当地时间,而不是世界时间?

    用户输入的日期输入2019 12 22给出这些值 input value 2019 12 22 input valueAsNumber 1576972800000 input valueAsDate Sat Dec 21 2019 16 0
  • 多个构建风格的 applicationId 清单占位符不起作用

    我正在修改当前的 android 项目 以便它可以安装在同一设备上以实现多种风格和构建配置 构建 gradle defaultConfig applicationId com myapp manifestPlaceholders manif
  • Windows 窗体中的十进制文本框

    我正在做一个 Financial Winforms 应用程序 但在控件方面遇到了一些问题 我的客户需要在各处插入小数值 价格 折扣等 我想避免一些重复验证 因此 如果不是因为焦点和蒙版的长度 我立即尝试了能够满足我的需求的 MaskedTe
  • SQL Server:大块数据库查询

    我正在使用 Microsoft SQL Server Management Studio 我对 SQL Server 的专业知识很少 但我过去使用过 MySQL 并且非常擅长 我的问题是 我有一个相当大的数据库 有超过 1 3 亿条记录 我
  • 将 phpseclib 集成到 Laravel 5

    我目前正在将我的项目从 Laravel 4 迁移到 Laravel 5 我仍然是 Laravel 和 OOP 的新手用户 但到目前为止一切都很顺利 但是 在我的 L4 项目中 我使用 phpseclib 生成 SSH 密钥 并通过以下方式导
  • Gmail 的 HTML 电子邮件签名显示方式不同

    我使用 Thunderbird 作为我的主要工作邮件客户端 我刚刚创建了一个新的 HTML 签名 它可以在 Thunderbird Opera 和在线 HTML 查看器中正确显示 但不能在 GMail 上显示 如果有人能指出问题所在的方向
  • 在 R 中的函数内保存单个对象:RData 文件大小非常大

    我试图在 R 中保存修剪后的 GLM 对象 即所有 非必要 特征设置为 NULL 例如残差 prior weights qr qr 举个例子 看看我需要执行此操作的最小对象 print object size glmObject 16899