zoukankan      html  css  js  c++  java
  • R 函数内变量的保存

    前言

    以我不多的的编程经验来看,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

  • 相关阅读:
    第二阶段冲刺站立会议报告
    09软件工程读后感之三
    08软件工程读后感之二
    07软件工程读后感之一
    一个整数数组中最大字数组二
    返回一个二维数组最大联通子数组的和
    项目阶段总结
    大道至简阅读笔记之三
    大道至简阅读笔记二
    课堂设计
  • 原文地址:https://www.cnblogs.com/huanping/p/14561766.html
Copyright © 2011-2022 走看看