《R语言入门与实践》第六章:R 的环境系统
前言
这一章在对象的基础之上,讲解了对象所处的环境,进一步讲了环境对对象的作用,以及如何使用环境.
结构如下:
- 环境的定义和操作
- 环境的规则
- 制作闭包
环境
R 环境的定义
在 R 中,每一个数据对象都储存在一个环境中,每一个环境都与一个父环境相连,这样的父子环境构成一个分层的树形结构.
特点:
与计算机文件系统相似,但是不支持自上而下的搜索.
R 环境的操作
environment() 查看活动环境
活动环境:即 user workspace(用户工作区),命令行中运行的命令在 R_GlobalEnv(全局环境)中工作.
功能:查看活动环境
assign() 取值
格式:
assign("new", "Hello World!", envir = globalenv() )
assign 有三个参数:
- 对象的名称:字符串格式的名称
- 对象的取值
- 对象所在环境的名称
功能:在特定的环境中,创建一个含有特定的去值的数据对象.
parent.env() 查看父环境
功能:查看父环境
格式: parent.env(globalenv())
其中的参数为环境的调用函数.
在 R 中,有三种环境可以调用,分别是:
- R_GlobalEnv 全局环境: globalenv()
- base 基环境: baseenv()
- R_EmptyEnv 空环境:emptyenv()
R 环境的规则
作用域规则
在命令行工作的前提下,活动环境为全局环境
规则如下:
- 首先在全局环境中搜索对象
- 如果没有搜索到对象,那么进行该环境的父环境继续搜索对象.
函数工作环境
运行函数时,函数本身创建一个临时的工作环境.
原环境:函数工作环境(调用环境)的父环境
注意:
- 在命令行创建的函数的原环境为 R_GlobalEnv
- 对于其他函数,函数第一次运行所在的环境为该函数运行的父环境
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 的环境系统的更多相关文章
- 《R语言入门与实践》第一章:R基础
前言 本章介绍了 R 语言的基础知识 界面: 使用命令 “ R “进行命令行的实时编译 对象 定义: 用于储存数据的,设定一个名称 格式: a <- 1:6 命名规则: 规则1:不能以数字开头规 ...
- 《R语言入门与实践》第二章:R包和帮助文档
这一章讲了两方面的内容,如何使用 R 包和帮助文档. R包 下载 R 包 命令: install.packages("<nameofpackage>") R 会话中启用 ...
- 《R语言实战》读书笔记--第一章 R语言介绍
1.典型的数据分析过程可以总结为一下图形: 注意,在模型建立和验证的过程中,可能需要重新进行数据清理和模型建立. 2.R语言一般用 <- 作为赋值运算符,一般不用 = ,原因待考证.用-> ...
- python编程:从入门到实践----第六章>字典
一.一个简单的字典:alien_0存储外星人的颜色和点数,使用print打印出来 alien_0 = {'color': 'green','points': 5} print(alien_0['col ...
- 《R语言入门与实践》第七章:程序
前言 这一章讲了程序设计的相关知识,经过了: 算法分析 编码 得到最后的程序. if 语句 格式:if (this) {that} else if { another} else { another ...
- 《R语言入门与实践》第五章:对象改值
本章将了如何对一个数据对象中的数据进行改动,分为以下方法: 直接改值 条件取值然后改值 直接改值 单个改值:vec[1] <- 1000多个改值: vec[c(1,3,5)] <- 100 ...
- 《R语言入门与实践》第三章:R 对象
在这一章,包含的内容有: R 的数据类型 属性 类(特殊的属性) Ruby 的数据结构 R 数据类型 R 可以识别六种类型的数据类型,分别是: double integer character log ...
- 《R语言入门与实践》第四章:R 的记号体系
这一章节将如何对 R 对象中的值进行选取,R 的符号规则有两种方式进行查询: 第一种记号体系:索引查询索引语法:deck[ , ](使用中括号)其中[ , ] 为索引,其中含有两个索引参数,用 &qu ...
- Python:从入门到实践--第六章--字典--练习
#1.人:使用一个字典来存储一个熟人的信息;包括姓,名,年龄和居住的城市.将字典中的每项信息都打印出来 friend = { 'last_name':'马', 'first_name':'脑壳', ' ...
随机推荐
- vs2008将 win32项目改为console项目
属性-linker-system-subsystem
- 阿里云轻量级服务器上JDK及tomcat部署配置
先下载JDK和tomcat到本地 地址为http://www.oracle.com/technetwork/java/javase/downloads/index-jsp-138363.html ht ...
- mysql 和 hive 和分布式zookeeper和HBASE分布式安装教程
一,mysql 安装mysql5.7完整教程1. yum -y install mysql-server直接执行语句后等待就好已安装: mysql-community-server.x86_64 0: ...
- 轻量级集群管理软件-ClusterShell
如果集群数量不多的话,选择一个轻量级的集群管理软件就显得非常有必要了.ClusterShell就是这样一种小的集群管理工具,原理是利用ssh,可以说是Linux系统下非常好用的运维工具 cluste ...
- ABP 2.0.2 升到 2.2.1
1.选择解决方案 右键 管理 nuget 更新 输入abp 这里只升级 abp的包 点升级 2.update-database 可能需要你添加个迁移(这一步可能不需要) 3.Core 项目下面的Au ...
- DataGridView 列排序 内存表查找
DataRow[] drow = dt.Select("列名 = 列名的值" ); 就这句话,dt是一个datatable 且断点调试时能看到里面有trade这个列,可为什么执行到 ...
- jdbc笔记(二) 使用PreparedStatement对单表的CRUD操作
首先声明,本文只给出代码,并不是做教程用,如有不便之处,还请各位见谅. PreparedStatement相较于Statement,概括来说,共有三个优势: 1. 代码的可读性和易维护性:Prepar ...
- bloc控制读写文件
import 'package:flutter/material.dart'; import 'dart:io'; import 'package:path_provider/path_provide ...
- SSM-网站前台博客系统制作(2)---完善版Google的Kaptcha
前提: 在上一篇文章中,可以加入基本的验证码,但是很呆板,验证码也无法传输到Controller进行处理,然后现在改正了一下,可以刷新验证码,然后和登录名,密码一起提交过去, 弄了一下午和晚上,QAQ ...
- ubuntu下C/C++获取剩余内存
#include <stdio.h> #include <unistd.h> long get_memory_usage() { long page_size = syscon ...