R的环境系统
时间:2019-12-16
本文章向大家介绍R的环境系统,主要包括R的环境系统使用实例、应用技巧、基本知识点总结和需要注意事项,具有一定的参考价值,需要的朋友可以参考一下。
r环境概念
环境:用来具体存储对象的地方。
规则1:每一个对象都存储在一个环境当中。
规则2:每一个环境都与一个父环境相连接,构成一个分层的环境系统。
规则3:子环境与父环境的连接是单向的。
parenvs()查看当前R的环境; parenvs(all=TRUE)会返回当前会话包含的环境列表。
as.environment():指向环境树中的任意一个环境。
globalenv(); base(); emptyenv(); parent.env()
assign():赋值函数
#R的环境系统
install.packages("pryr")
library(pryr)
#查看当前R的环境
parenvs()
#显示R的环境树
parenvs(all = T)
空环境的特点:
#1.空环境没有父环境 #2.空环境当中没有存储任何对象
#当我们加载一个包的时候,这个包会在R里边
#创建一个新的环境,并且这个新的环境会作为
#全局环境的父环境
library(ggplot2)
parenvs(all = T)
library(xlsx)
parenvs(all = T)
library(openxlsx)
#指向一个环境 as.environment("package:xlsx") #指向全局环境 globalenv() #指向基环境 baseenv() #指向空环境 emptyenv() #查看一个环境的父环境 parent.env(globalenv()) #列出当前环境创建的所有对象 ls() ls(baseenv()) ls(emptyenv()) #练习:列出ggplot2包里边的所有对象 ls(as.environment("package:ggplot2")) ls(package:ggplot2) #包里面的同名函数被屏蔽掉 #解决方式 #第一种方式 xlsx::write.xlsx() #第二种方式 as.environment("package:xlsx")$write.xlsx() #跨环境赋值 assign("nihao",3,envir = globalenv()) nihao #活动环境 #规则1:任何时候,R的活动环境都只有一个 #规则2:所有的新对象都会被存储在该环境中 #规则3:在搜索对象的时候,会优先从当前的环境里边搜索 #查看当前的活动环境 environment() ls() #查找一个对象保存在哪个环境中 find("c")
作用域规则
#作用域规则
#规则1:R首先在当前的活动环境中搜索对象
#规则2:当R在某个环境中没有搜索到对象时,
#R会进入到该环境的父环境继续搜索
> c(4,6)
[1] 4 6
> c<-9
> c
[1] 9
#活动环境
#规则1:任何时候,R的活动环境都只有一个
#规则2:所有的新对象都会被存储在该环境中
#规则3:在搜索对象的时候,会优先从当前的环境里边搜索
#查看当前的活动环境
environment()
ls()
#查找一个对象保存在哪个环境中
find("c")
#作用域规则
#规则1:R首先在当前的活动环境中搜索对象
#规则2:当R在某个环境中没有搜索到对象时,
#R会进入到该环境的父环境继续搜索
c(4,6)
c<-9
c
#错误的函数定义
c<-function(x,y){
x+y
}
c(4,6)
find("c")
#调用base包里的c函数
base::c(4,6)
baseenv()$c(4,6)
rm(c)
c(4,6)
library(xlsx)
parenvs(all = T)
#从环境树中移除一个包
detach("package:xlsx")
library(xlsx)
#运行时环境
#作用:避免与全局环境中的变量起冲突
c1<-function(x,y){
x+y
}
x<-5
c2<-function(t){
x<-10
x+t
}
#原环境
#创建函数的环境就是它的原环境
#不管这个函数在哪里调用,
#它的父环境永远都是它的原环境
show_env<-function(){
list(hj=environment(),
fhj=parent.env(environment()),
dx=ls(environment()))
}
show_env()
#调用环境
x<-1:8
y<-x^3
qplot(x,y)
show_env<-function(){
a<-3
b<-4
list(hj=environment(),
fhj=parent.env(environment()),
dx=ls(environment()))
}
show_env()
#单链接
#子环境可以搜索父环境里边的对象,
#但是父环境不能搜索子环境里边的对象
#参数
#函数运行时,参数会作为一个新的对象,
#保存在运行时环境中
show_env<-function(ui){
a<-3
b<-4
list(hj=environment(),
fhj=parent.env(environment()),
dx=ls(environment()))
}
show_env()
环境系统总结:
#1.任何时候,R的活动环境都只有一个
#2.它会将所有的新对象存储在这个环境中,
#并且在搜索对象时,以此环境作为初始搜寻点
#3.R的活动环境通常为全局环境,但是当R在做
#函数求值时,会临时将活动环境调整为运行时环境,
#这种运作模式保证了安全性
#4.定义函数的初始环境就是原环境,或者叫做父环境
#5.调用函数的环境就是函数的调用环境
构建发牌函数
#构建发牌函数 PKP<-pkp # R语言记号体系,不要第一行数据 pkp[-1,] fapai<-function(){ ca<-pkp[1,] assign("pkp",pkp[-1,],envir = globalenv()) ca } fapai() #构建洗牌函数 pkp<-PKP xipai<-function(){ sjs<-sample(1:52,52) # 在全局变量中找到PKP[sjs,]赋值给pkp assign("pkp",PKP[sjs,],envir = globalenv()) } xipai() fapai() x<-1:6 # 随机函数 x[sample(x,6)] #构建闭包 setup<-function(pk){ PK<-pk #构建发牌函数 fp<-function(){ ca<-pk[1,] assign("pk",pk[-1,],envir = parent.env(environment())) ca } #构建洗牌函数 xp<-function(){ sjs<-sample(1:52,52) assign("pk",PK[sjs,],envir = parent.env(environment())) } list(FP=fp,XP=xp) } pkp<-PKP pai<-setup(pk=pkp) pai 发牌<-pai$FP 洗牌<-pai$XP rm(pkp) 洗牌() 发牌() #项目三-lao hu ji #BBB BB B #BB B BB #B B B #C 7 C #C C BB #C C C #C 7 7 #DD C B #B 0 0 #7 7 DD 160 #BBB BB DD #C 0 DD #7 DD DD 320 #DD DD DD 800 #DD 7 0
原文地址:https://www.cnblogs.com/foremostxl/p/12019079.html
- CPU 100%负载的性能优化分析(r7笔记第40天)
- Sklearn-train_test_split随机划分训练集和测试集
- 使用shell来定制dbms_sqltune(r7笔记第39天)
- 简单易学的机器学习算法——分类回归树CART
- Java设计模式-状态模式
- DBA和开发同事的一些代沟(四) (r7笔记第36天)
- python获取文件所在目录和文件名,以及检索当前文件名的方法
- 数据同步中的误导(r7笔记第34天)
- java读取xml文件
- 优化算法——粒子群算法(PSO)
- Java开发画板
- Python—numpy模块下函数介绍(一)numpy.ones、empty等
- Tomcat用户权限设置
- 优化算法——模拟退火算法
- JavaScript 教程
- JavaScript 编辑工具
- JavaScript 与HTML
- JavaScript 与Java
- JavaScript 数据结构
- JavaScript 基本数据类型
- JavaScript 特殊数据类型
- JavaScript 运算符
- JavaScript typeof 运算符
- JavaScript 表达式
- JavaScript 类型转换
- JavaScript 基本语法
- JavaScript 注释
- Javascript 基本处理流程
- Javascript 选择结构
- Javascript if 语句
- Javascript if 语句的嵌套
- Javascript switch 语句
- Javascript 循环结构
- Javascript 循环结构实例
- Javascript 跳转语句
- Javascript 控制语句总结
- Javascript 函数介绍
- Javascript 函数的定义
- Javascript 函数调用
- Javascript 几种特殊的函数
- JavaScript 内置函数简介
- Javascript eval() 函数
- Javascript isFinite() 函数
- Javascript isNaN() 函数
- parseInt() 与 parseFloat()
- escape() 与 unescape()
- Javascript 字符串介绍
- Javascript length属性
- javascript 字符串函数
- Javascript 日期对象简介
- Javascript 日期对象用途
- Date 对象属性和方法
- Javascript 数组是什么
- Javascript 创建数组
- Javascript 数组赋值与取值
- Javascript 数组属性和方法
- PHP实现小程序批量通知推送
- Keras loss函数剖析
- Laravel使用scout集成elasticsearch做全文搜索的实现方法
- python3.4中清屏的处理方法
- TensorFlow Autodiff自动微分详解
- python interpolate插值实例
- pandas.DataFrame.drop_duplicates 用法介绍
- python如何进入交互模式
- PHP静态方法和静态属性及常量属性的区别与介绍
- 详解PHP变量传值赋值和引用赋值变量销毁
- Keras 利用sklearn的ROC-AUC建立评价函数详解
- PHP如何防止XSS攻击与XSS攻击原理的讲解
- 如何验证python安装成功
- python三引号如何输入
- Python定义一个函数的方法