前言

这一章在对象的基础之上,讲解了对象所处的环境,进一步讲了环境对对象的作用,以及如何使用环境.
结构如下:

  1. 环境的定义和操作
  2. 环境的规则
  3. 制作闭包

环境

R 环境的定义

在 R 中,每一个数据对象都储存在一个环境中,每一个环境都与一个父环境相连,这样的父子环境构成一个分层的树形结构.

特点:

与计算机文件系统相似,但是不支持自上而下的搜索.

R 环境的操作

environment() 查看活动环境

活动环境:即 user workspace(用户工作区),命令行中运行的命令在 R_GlobalEnv(全局环境)中工作.
功能:查看活动环境

assign() 取值

格式:
assign("new", "Hello World!", envir = globalenv() )
assign 有三个参数:

  1. 对象的名称:字符串格式的名称
  2. 对象的取值
  3. 对象所在环境的名称

功能:在特定的环境中,创建一个含有特定的去值的数据对象.

parent.env() 查看父环境

功能:查看父环境
格式: parent.env(globalenv())
其中的参数为环境的调用函数.
在 R 中,有三种环境可以调用,分别是:

  1. R_GlobalEnv 全局环境: globalenv()
  2. base 基环境: baseenv()
  3. R_EmptyEnv 空环境:emptyenv()

R 环境的规则

作用域规则

在命令行工作的前提下,活动环境为全局环境
规则如下:

  1. 首先在全局环境中搜索对象
  2. 如果没有搜索到对象,那么进行该环境的父环境继续搜索对象.

函数工作环境

运行函数时,函数本身创建一个临时的工作环境.
原环境:函数工作环境(调用环境)的父环境

注意:

  1. 在命令行创建的函数的原环境为 R_GlobalEnv
  2. 对于其他函数,函数第一次运行所在的环境为该函数运行的父环境

Closure 闭包

定义:

由于函数中存在位置处于 R_GlobalEnv 中的数据对象.而 R_GlobalEnv 时常发生变化,因此为了安全,将 R_GlobalEnv 的参数即函数打包在一起,使得函数调用时,能够在当前环境直接调用.称为「闭包」.

格式:

setup <- function(deck) {
DECK <- deck

DEAL <-function(){
card <- deck[1, ]
assign("deck", deck[-1, ], envir = parent.env(enviroment()))
card
}

《R语言入门与实践》第六章:R 的环境系统的更多相关文章

  1. 《R语言入门与实践》第一章:R基础

    前言 本章介绍了 R 语言的基础知识 界面: 使用命令 “ R “进行命令行的实时编译 对象 定义: 用于储存数据的,设定一个名称 格式: a <- 1:6 命名规则: 规则1:不能以数字开头规 ...

  2. 《R语言入门与实践》第二章:R包和帮助文档

    这一章讲了两方面的内容,如何使用 R 包和帮助文档. R包 下载 R 包 命令: install.packages("<nameofpackage>") R 会话中启用 ...

  3. 《R语言实战》读书笔记--第一章 R语言介绍

    1.典型的数据分析过程可以总结为一下图形: 注意,在模型建立和验证的过程中,可能需要重新进行数据清理和模型建立. 2.R语言一般用 <- 作为赋值运算符,一般不用 = ,原因待考证.用-> ...

  4. python编程:从入门到实践----第六章>字典

    一.一个简单的字典:alien_0存储外星人的颜色和点数,使用print打印出来 alien_0 = {'color': 'green','points': 5} print(alien_0['col ...

  5. 《R语言入门与实践》第七章:程序

    前言 这一章讲了程序设计的相关知识,经过了: 算法分析 编码 得到最后的程序. if 语句 格式:if (this) {that} else if { another} else { another ...

  6. 《R语言入门与实践》第五章:对象改值

    本章将了如何对一个数据对象中的数据进行改动,分为以下方法: 直接改值 条件取值然后改值 直接改值 单个改值:vec[1] <- 1000多个改值: vec[c(1,3,5)] <- 100 ...

  7. 《R语言入门与实践》第三章:R 对象

    在这一章,包含的内容有: R 的数据类型 属性 类(特殊的属性) Ruby 的数据结构 R 数据类型 R 可以识别六种类型的数据类型,分别是: double integer character log ...

  8. 《R语言入门与实践》第四章:R 的记号体系

    这一章节将如何对 R 对象中的值进行选取,R 的符号规则有两种方式进行查询: 第一种记号体系:索引查询索引语法:deck[ , ](使用中括号)其中[ , ] 为索引,其中含有两个索引参数,用 &qu ...

  9. Python:从入门到实践--第六章--字典--练习

    #1.人:使用一个字典来存储一个熟人的信息;包括姓,名,年龄和居住的城市.将字典中的每项信息都打印出来 friend = { 'last_name':'马', 'first_name':'脑壳', ' ...

随机推荐

  1. Xamarin.Forms FlexLayout 布局扩展+ 模板扩展+弹性换行

    Binding a FlexLayout to a Collection   In May we published a doc on the new FlexLayout control that’ ...

  2. 如何通过轮询实现session自动注销

    每个用户在访问完网站后,经常会忽略注销账户,session默认存在的时间为30分钟,因此如果需要立即关闭session而又不用麻烦用户则可以通过轮询的方法来实现. 以下通过代码的讲解: xml配置文件 ...

  3. Maven 学习笔记-maven属性

    Maven有六类属性: 1)内置属性 主要有两个常用内置属性 ${basedir}:表示项目根目录,即包含pom.xml文件的目录: ${version}:表示项目版本: 2)POM属性 ${M2_H ...

  4. textarea如何实现高度自适应?

    今天需要些一个回复评论的页面,设计师给的初始界面就是一个只有一行的框.然后当时就想这个交互该怎么实现比较好,然后想起了新浪微博的做法:点击评论,默认显示一行,当输入的文字超过一行或者输入Enter时, ...

  5. docker-images(镜像)

    一.获取镜像 docker search NAME  搜索引擎查找镜像 docker pull NAME:<TAG> 拉去镜像 NAME:表示镜像名称/镜像仓库的名称 TAG: 表示镜像的 ...

  6. 浅析贝叶斯神经网络(Based on Variational Bayesian)

    https://blog.csdn.net/qq_20195745/article/details/82453589 贝叶斯神经网络简介 对于一个神经网络来说,最为核心的是如何根据训练集的数据,得到各 ...

  7. linux查看与修改交换内存配置(解决zabbix-agent启动报错)

    问题 zabbix-agent在一台centos6.5上启动报错: cannot allocate shared memory of size 949056: [28] No space left o ...

  8. selenium 文件上传

    一般分两个场景:一种是input标签,这种可以用selenium提供的send_keys()方法轻松解决: 另外一种非input标签实现起来比较困难,可以借助autoit工具或者SendKeys第三方 ...

  9. 【做题】ECFinal2018 J - Philosophical … Balance——dp

    原文链接 https://www.cnblogs.com/cly-none/p/ECFINAL2018J.html 题意:给出一个长度为\(n\)的字符串\(s\),要求给\(s\)的每个后缀\(s[ ...

  10. SQL 删除数据 的所有用法

    https://blog.51cto.com/13588598/2066335 1.使用 delete 语句删除表中的数据:语法:delete from <表名> [where <删 ...