第三章:R语言编程 第四节:作用域

一、基本概念

一段程序代码种用到的名称(如变量名)并不总是有效的,而限定该名称可用性的代码范围就称为作用域,R语言采用词法作用域,也成为静态作用域,只有定义变量的语句在内部才能访问该变量,外部变量可以被内部变量访问

如果函数内部与全局变量同名的局部变量,则优先使用函数内部的内部变量

同时,在内部语句块中访问的变量,不能再函数外部访问函数内部定义的名称

对于函数内部的名称,R首先会从函数内部的变量进行查找,因此,函数参数中的变量名也优先于全局变量,不过这基本跟语句的顺序有关

额外内容

在嵌套函数中,如果g()并未声明变量a,R语言会从包裹g()函数的f()函数中查找变量a

如果还找不到,就会直接使用全局变量a

如果我们尝试在内部语句块中修改外部语句块声明的变量值时,由于内部语句块优先于外部语句块,所以使用<-运算符赋值时,被赋值的对象会被视为内部语句块的对象,即在内部语句块内创建一个新a变量

因此如果我们想要内外一致,则需要使用<<-运算符,将a进行深度赋值

二、R对象

如果我们使用未经声明的变量,会导致报错

下面介绍一下与内存中对象相关的函数

1.rm(),删除指定环境中的对象

我们可以使用rm(list=ls())命令可以删除内存中的所有对象。

2.ls(): 这个函数用于列出当前环境中所有的对象名称

例如:

另外objects()函数也和ls()函数类似,用于列出当前环境中所有对象的名称

3.get(): 可以根据对象名称获取对象本身的值

例如:

但需要注意,对象名称需要以字符串形式

4.gc(): 用于进行垃圾回收,释放不再使用的内存空间,配合rm函数使用更佳

5.assign(): 用于将一个值分配给一个对象,语法为assign("object_name", value)

例如

6.exists(): 使用exists()函数可以检查指定的对象是否存在于当前环境中,会返回一个逻辑值

例如:

相关推荐
虚行20 分钟前
Python学习入门
开发语言·python·学习
总有刁民想爱朕ha24 分钟前
Python自动化从入门到实战(23):Python打地鼠游戏开发
开发语言·python·游戏开发
曹牧25 分钟前
C#:函数默认参数
开发语言·c#
黄焖鸡能干四碗34 分钟前
MES生产执行制造系统建设(Java+Mysql)
java·大数据·开发语言·信息可视化·需求分析
workflower37 分钟前
跨链协同制造中的服务博弈与激励机制
开发语言·软件工程·制造·需求分析·个人开发·结对编程
liulilittle41 分钟前
Y组合子剖析:C++ 中的递归魔法
开发语言·c++·编程语言·函数式编程·函数式·函数编程·y组合子
金涛03193 小时前
QT-day2,信号和槽
开发语言·qt·命令模式
R-G-B9 小时前
【02】C#入门到精通——C# 变量、输入/输出、类型转换
开发语言·c#·c# 变量·c#输入/输出·c#类型转换
星河队长9 小时前
C# 软件加密方法,有使用时间限制,同时要防止拷贝
开发语言·c#
史迪奇_xxx9 小时前
10、一个简易 vector:C++ 模板与 STL
java·开发语言·c++