R语言变量作用域

语言采用的是Lexical Scoping(词法作用域)。词法作用域,又称静态作用域,即变量定义后的作用域是不变的。

在函数的主体里面,变量是分为被约束的、局部的、或自由的三种。被约束的变量是指匹配函数形式参数的变量。局部变量是指,在函数主题内创建和定义的变量。自由变量指的是那些既不是
局部也不是被约束的变量。当一个函数主体被求值,确定一个局部或 被约束变量的值没有问题。作用域规则决定了一个语言如何为自由变量
找恰当的值。

在R中,自由变量的取值是由它所在函数定义的环境(environment)中的取值决定的。看下面一段代码:


y <- 10
f<- function(x){
y <- 2
y^2 + g(x)
}

g <- function(x){
x*y
}

f(3)

求值f(3):
y是函数f中的局部变量,被赋值为2;在函数f内调用函数g,在函数g中y是自由变量,g(2)=2*y,y的取值是由定义函数g时决定的,因此y的取值是10而不是2。因此得到值为34。

参见:http://www.biosino.org/R/R-doc/R-lang/Scope.html

R语言变量作用域

时间: 2024-09-29 02:27:59

R语言变量作用域的相关文章

黑马程序员-c语言变量作用域问题

c语言中的变量作用域总结 不管什么语言,main好像总是程序的入口,大括号是它的内容:变量的作用域总是困扰着我们,接下来,我们循序渐进的搞明白c语言中的变量作用域,首先得知道c是弱类型的语言,弱类型表现在很多方面: 1:你可以直接在程序中写一个常量,然后一个分号:1: 2:在定义函数时,void型的函数可以return:int型的可以不用写返回值. ---还有很多 下面我们一步一步开始:首先在main中定义的变量当然作用于整个main函数了 1:在main中定义变量 #include<stdio

R语言变量赋值

变量可以使用向左,向右且等于操作符来分配值.可以使用 print() 或 cat() 函数打印变量的值.cat() 函数将多个项目并成连续并打印输出. # Assignment using equal operator. var.1 = c(0,1,2,3) # Assignment using leftward operator. var.2 <- c("learn","R") # Assignment using rightward operator. c

R语言--变量与数据类型

R语言的数据分类 R语言的数据类型较多,但都是动态声明,即变量不会声明为某种数据类型.变量分配为R对象 向量 列表 矩阵 数组 数据帧 因子 下面是几种最简单对象的类型 # Atomic vector of type character. print("abc");#character # Atomic vector of type double. print(12.5)#numeric # Atomic vector of type integer. print(63L)#integ

c# 语言变量作用域

今天工作发现如下代码会报错 1 if (oskarray.Length > 0) 2 { 3 4 5 } 6 else 7 { 8 Process p = new Process(); 9 } 10 Process p = new Process(); 原因是p被重复定义 但是我的理解应该一对大括号之内的变量是被限制在这对大括号之内的吗? 记在这

Go的变量作用域

Go 语言变量作用域 作用域为已声明标识符所表示的常量.类型.变量.函数或包在源代码中的作用范围. Go 语言中变量可以在三个地方声明: 函数内部定义的变量称为局部变量 函数外部定义的变量称为全局变量 函数定义中传的变量称为形式参数 局部变量 在函数体内声明的变量称之为局部变量,它们的作用域只在函数体内,参数和返回值变量也是局部变量. 栗子~ 1 package main 2 3 import ( 4 "fmt" 5 ) 6 7 func plus() int{ 8 //声明并初始化局

R语言学习笔记-变量的作用域

R语言是如何将变量值和变量绑定的 在r语言中,当前的 workspace就是global enviroment,当输入变量名时,首先会在global enviroment中搜索该变量,如有,则将它显示出来. 第二步,如在global enviroment中没有找到该变量民,则搜索search list中的各个包,search list 中的内容可以用search()得到 如果用户使用library()load了一个package ,则这个package将在search list中处于第二的位置

C语言-数据类型、常量、变量、变量作用域、printf、scanf函数

4.数据类型介绍 数据:文本数据.音频.视频.图像.数字 C语言中有5大数据类型:基本类型.构造类型.空类型.指针类型.自定义类型 基本数据类型: 整型    长整型long int    整型int(4)    端整型short int 实型    单精度float(4)    双精度 double(8) 字符型   char(1) 内存: 1> 内存分配:4G存储大小:4*1024*1024*1024Byte; 内存的基本单元为一个字节(就是8bit) 2> 内存区域:栈 (存放局部变量)

R语言:变量名称和字符串的转换

R语言:变量名称和字符串的转换 2014-06-23 14:45:27 在R语言中,经常会遇到变量名称和字符串相互转换的问题.比如说,进行1000次循环运算,并将运算结果存储在1000个变量中,如x_1, x_2, ... , x_1000.这时候可以使用assign()函数,示例如下: > a错误: 找不到对象'a'> assign('a', 1)> a[1] 1 上面的例子将字符'a'转变为变量a,并将其赋值为1 . 相反,如果我们想遍历一个变量序列,并对其中的每一个变量都进行操作,

R语言学习笔记-变量重命名

在R语言中变量是在赋值时才创建的,不能事先进行声明.这里变量重命名实际上指的是给变量中的子变量重命名,如果从面向对象的角度来说,就象是修改一个类的属性名,其数据保持不变.在一般面向对象的语言中,修改属性名是不允许的,修改属性名就等于把该属性删除,再重新创建一个属性,并赋值. 在R语言里为什么要能修改属性名呢,这应和R主要的工作领域有关,R作为统计分析类语言,需要处理大量数据,处理的主体是数据对象,若按面向对象的方式,则先要修改类的属性,再重新实例化,让后再给属性赋值,这对于已拥有大量数据的R变量