📜  R中的变量范围

📅  最后修改于: 2022-05-13 01:55:16.137000             🧑  作者: Mango

R中的变量范围

在 R 中,变量是存储数据值的容器。它们是内存中对象的引用或指针,这意味着每当将变量分配给实例时,它都会映射到该实例。 R 中的变量可以存储一个向量、一组向量或许多 R 对象的组合。

示例

# R program to demonstrate 
# variable assignment  
  
# Assignment using equal operator
var1 = c(0, 1, 2, 3)
print(var1)
  
# Assignment using leftward operator
var2 <- c("Python", "R")
print(var2)
  
# A Vector Assignment
a = c(1, 2, 3, 4)
print(a)
b = c("Debi", "Sandeep", "Subham", "Shiba")
print(b)
  
# A group of vectors Assignment using list
c = list(a, b)
print(c)

输出:

[1] 0 1 2 3
[1] "Python" "R"     
[1] 1 2 3 4
[1] "Debi"    "Sandeep" "Subham"  "Shiba"  
[[1]]
[1] 1 2 3 4

[[2]]
[1] "Debi"    "Sandeep" "Subham"  "Shiba"  

变量的命名约定

  • R 中的变量名必须是字母数字字符,但下划线('_')句点('.') 除外,它们是可用于变量名的特殊字符。
  • 变量名必须始终以字母开头。
  • 变量名中不允许使用其他特殊字符,例如 ('!'、'@'、'#'、'$')。

例子:

# R program to demonstrate 
# rules for naming the variables 
  
# Correct naming
b2 = 7 
  
# Correct naming
Amiya_Profession = "Student" 
  
# Correct naming
Amiya.Profession = "Student" 
  
# Wrong naming
2b = 7 
  
# Wrong naming
Amiya@Profession = "Student" 

上面的代码在执行时会因为变量命名错误而产生错误。

Error: unexpected symbol in "2b"
Execution halted

变量的范围

我们可以找到变量并在需要时访问它的位置称为变量的范围。主要有两种类型的变量作用域:

  • 全局变量:全局变量是在整个程序执行过程中存在的变量。它可以从程序的任何部分更改和访问。
  • 局部变量:局部变量是像函数一样只存在于程序的某个部分中并在函数调用结束时释放的那些变量。

全局变量

顾名思义,可以从程序的任何部分访问全局变量。

  • 它们在程序的整个生命周期中都可用。
  • 它们在程序中所有函数或块之外的任何地方声明。
  • 声明全局变量:全局变量通常在所有函数和块之外声明。可以从程序的任何部分访问它们。
# R program to illustrate  
# usage of global variables  
   
# global variable 
global = 5 
   
# global variable accessed from 
# within a function 
display = function(){
  print(global)
} 
display() 
  
# changing value of global variable  
global = 10 
display()

输出:

[1] 5
[1] 10

在上面的代码中,变量' global '在程序顶部声明在所有函数之外,因此它是一个全局变量,可以从程序中的任何地方访问或更新。

局部变量

在函数或块中定义的变量被称为这些函数的局部变量。

  • 局部变量不存在于声明它们的块之外,即不能在该块之外访问或使用它们。
  • 声明局部变量:局部变量在块内声明。

例子:

# R program to illustrate  
# usage of local variables  
  
func = function(){
  # this variable is local to the 
  # function func() and cannot be  
  # accessed outside this function 
  age = 18    
} 
  
print(age)

输出:

Error in print(age) : object 'age' not found

上面的程序显示一个错误,说“找不到对象'年龄'”。变量 age 是在函数“func()”中声明的,因此它是该函数函数的程序部分不可见。

要纠正上述错误,我们必须仅显示函数“func()”中的变量 age 的值。

例子:

# R program to illustrate  
# usage of local variables  
  
func = function(){
  # this variable is local to the 
  # function func() and cannot be  
  # accessed outside this function 
  age = 18    
  print(age)
} 
  
cat("Age is:\n")
func()

输出:

Age is:
[1] 18

访问全局变量

全局变量可以从代码中的任何地方访问,而局部变量的作用域仅限于创建它们的代码块。

例子:

f = function() {
   # a is a local variable here
   a <-1
}
f()
  
# Can't access outside the function
print(a) # This'll give error

输出:

Error in print(a) : object 'a' not found

在上面的代码中,我们看到我们无法访问函数外部的变量“a”,因为它是由将“a”作为局部变量的赋值运算符(<-)赋值的。为了对全局变量进行赋值,使用了超级赋值运算符(<<-)

超级赋值运算符如何工作?
在函数中使用此运算符时,它会在父环境框架中搜索变量,如果没有找到它会继续搜索下一级,直到到达全局环境。如果仍未找到该变量,则在全局级别创建和分配它。

例子:

# R program to illustrate
# Scope of variables
  
outer_function = function(){
  inner_function = function(){
    # Note that "<<-" operator here
    # makes a as global variable
    a <<- 10
    print(a)
  }
  inner_function()
  print(a)
}
outer_function()
  
# Can access outside the function
print(a)

输出:

[1] 10
[1] 10
[1] 10

当在inner_function()中遇到语句“a <<- 10”时,它会在outer_function()环境中查找变量“a”。当搜索失败时,它会在R_GlobalEnv中搜索。由于“a”也没有在这个全局环境中定义,它是在那里创建和分配的,现在在inner_function()outer_function () 中引用和打印。