前言

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

  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. React组件绑定this的三种方法

    我们在使用React组件时,调用方法常常用到this和event对象,默认情况是不会绑定到组件上的,需要特殊处理. 节点上使用bind绑定 特点:该方法会在每次渲染组件时都会重新绑定一次,消耗一定的性 ...

  2. C# Window Service安装、卸载、恢复选项操作

    using System;using System.Diagnostics;using System.Linq;using System.ServiceProcess; namespace ScmWr ...

  3. node概述

    1.什么是node:“一个搭建在Chrome JavaScript运行时 上的平台,用于构建高速.可伸缩的网络程序.Node.js采用的事件驱动.非阻塞I/O模型,使它 既轻量又高效,并成为构建运行在 ...

  4. LR12中针对WebServices协议的三种脚本开发模式

    一,webservices协议简介 webservices是建立可交互操作的分布式应用程序的新平台,它通过一系列的标准和协议来保证程序之间的动态连接, 其中最基本的协议包括soap,wsdl,uddi ...

  5. PIL模块

    处理图片的模块 打开图片 im=Image.open("1.png") 创建字体对象 先要字体文件 font = ImageFont.truetype('C:\\WINDOWS\\ ...

  6. x509证书相关内容

    什么是证书 X.509证书,其核心是根据RFC 5280编码或数字签名的数字文档.    实际上,术语X.509证书通常指的是IETF的PKIX证书和X.509 v3证书标准的CRL 文件,即如RFC ...

  7. webdriver保存验证码截图

    element = wait.until ( EC.visibility_of_element_located((By.CSS_SELECTOR,'.quc-main .quc-field-captc ...

  8. LapSRN

    Deep Laplacian Pyramid Networks for Fast and Accurate Super-Resolution 解决问题: 1.bicubic预处理上下采样,计算复杂度高 ...

  9. PL/SQL变量和类型

    变量 在定义变量时一定要为其指定一个类型,类型可以是PL/SQL类型或SQL语言的类型,一旦变量的类型确定,那么变量中所能存储的值也就确定了,因此尽管变量的值会经常改变,但是值的类型是不可以变化的. ...

  10. android源码编译出现No private recovery resources for TARGET_DEVICE解决方法

    mmm或mm出现以下提示的解决方法:Terminal log:No private recovery resources for TARGET_DEVICE xxxxxxmake: Entering ...