美文网首页
R 函数内变量的保存

R 函数内变量的保存

作者: 何物昂 | 来源:发表于2021-03-20 21:43 被阅读0次

前言

以我不多的的编程经验来看,R相比其他语言,可以很方便的保存以及加载变量。save可以指定多个变量来多个变量,save.image用于保存当前环境的全局变量。

运用函数,我们可以把经常运行的多行代码封装起来。运行时,直接调用函数,就可以一次执行多个操作。但是虽然我们用函数简单封装了个流程,大多情况,我们可能也只需最后的运行结果,但有时,我们还是需要中间的运行变量,做一些检查,分析操作等。即,我们需要保存函数内的局部变量。

函数内变量保存

假设我们有这么一个简单函数,通过save,就可以直接保存多个变量了。

ab <- function(addNum, rdata.path){
  a <- c(1,2,3) + addNum
  b <- c(1,2,3) + addNum
  save(a, b, file =rdata.path)
}
ab(10, "~/tmp/test.10.RData")
-----------------------------------------------------------------------
> load("~/tmp/test.10.RData")
> a
[1] 11 12 13
> b
[1] 11 12 13

但是这有个不好的问题是,函数内的变量很多的话,一个一个的写上就比较麻烦。save.image 是保存全局变量的,就算再函数内部调用也无法保存。

进而改进一下,使用ls获取函数内的变量名,ls自动获取当前环境的变量,在函数内运行的话,会获取函数的变量,而不是全局变量。

ab <- function(addNum, rdata.path){
  a <- c(1,2,3) + addNum
  b <- c(1,2,3) + addNum
  save(list=ls(), file = rdata.path)
}
ab(100, "~/tmp/test.100.RData")
-----------------------------------------------------------------------
> ab(100, "~/tmp/test.100.RData")
> a
[1] 101 102 103
> b
[1] 101 102 103

这样看起来是不错了。但是有个问题。后面加载的变量会覆盖前一个变量。

> load("~/tmp/test.100.RData")
> load("~/tmp/test.10.RData")
> a
[1] 11 12 13
> b
[1] 11 12 13

所以,我们需要改进一下,变量的加载。我们将变量加载到一个新的环境里,而不是加载当前工作环境中。

LoadToEnv <- function(RData, env = new.env()){
    load(RData, env)  #### 这里将RData加载到新环境里了
    return(env) 
  }
---------------------------------------------------------------------------
> ab10 <- LoadToEnv("~/tmp/test.10.RData")
> ab100 <- LoadToEnv("~/tmp/test.100.RData")
> ab10$a
[1] 11 12 13
> ab100$a
[1] 101 102 103
> ab10$b
[1] 11 12 13
> ab100$b
[1] 101 102 103

这样是不是挺不错了,嘻嘻.

参考

https://www.jianshu.com/p/43a00debf672

相关文章

  • R 函数内变量的保存

    前言 以我不多的的编程经验来看,R相比其他语言,可以很方便的保存以及加载变量。save可以指定多个变量来多个变量,...

  • 6-2【微信小程序全栈开发课程】记录页面(二)--获取记录数据

    1、添加data变量 添加records变量,用来保存记录数据 2、引入get工具函数 3、添加获取记录方法 在r...

  • 函数 -- 闭包

    函数引用 函数名中保存着函数的入口地址,将函数名赋给变量,该变量中也保存了函数地址,称为函数引用,可以使用变量()...

  • day05(2017.9.28)

    数组 声明变量是保存数据,数组可以保存多个变量 数组案例 函数 函数基础 函数小案例 arguments(参数)案例

  • 2019-05-10python学习记录-对文件进行操作

    用shelve模块保存变量 提取shelve保存的东西 用pprint.pformat()函数保存变量

  • bom

    在函数内的变量,只能在函数内被访问 局部变量 全局变量 如何让函数内的变量成为全局变量的 window.open(...

  • 闭包

    闭包:简单来说就是函数内返回函数效果:可以让变量使用保存在内存中不被释放,再者就是可以引用内部变量 我们简单来说一...

  • 重学 JavaScript 笔记(二)—— 原型 && 继承

    3.1 函数 3.1.1 函数声明: 3.1.2 函数调用 3.1.3 变量作用域 函数内声明的变量,只在该函数内...

  • Cloneable接口

    前置知识 Java在处理对象和变量时是不同的.变量传入函数实际上是引用传入函数内,在函数内的变量和函数外传入的变量...

  • JS闭包、定时器

    什么是闭包? 有什么作用闭包:函数对象可以通过作用域链相互关联,函数体内部的变量可以保存在函数的作用域内。 上述代...

网友评论

      本文标题:R 函数内变量的保存

      本文链接:https://www.haomeiwen.com/subject/fbzwcltx.html