Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/r/71.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
R 函数流:为什么这个函数返回20_R_Function_Scoping - Fatal编程技术网

R 函数流:为什么这个函数返回20

R 函数流:为什么这个函数返回20,r,function,scoping,R,Function,Scoping,假设我有一个名为l的函数: l <- function(x) x + 1 m <- function() { l <- function(x) x*2 l(10) } m() 为什么m返回x*2,而不是x+1?如果您不确定发生了什么,可以添加一些打印语句。让我们在代码中添加一些打印语句——一个在调用m之前,两个在m函数中,另一个在调用m之后: l <- function(x) x + 1 m <- function() { pri

假设我有一个名为
l
的函数:

l <- function(x) x + 1
m <- function() {
       l <- function(x) x*2
       l(10)
}
m()

为什么
m
返回
x*2
,而不是
x+1

如果您不确定发生了什么,可以添加一些打印语句。让我们在代码中添加一些打印语句——一个在调用
m
之前,两个在
m
函数中,另一个在调用
m
之后:

l <- function(x) x + 1
m <- function() {
  print(l)
  l <- function(x) x * 2
  print(l)
  l(10)
}
print(l)
# function(x) x + 1
m()
# function(x) x + 1
# function(x) x * 2
# <environment: 0x7f8da5ac3b58>
# [1] 20
print(l)
# function(x) x + 1

l如果您不确定发生了什么,添加一些打印语句可能会有所帮助。让我们在代码中添加一些打印语句——一个在调用
m
之前,两个在
m
函数中,另一个在调用
m
之后:

l <- function(x) x + 1
m <- function() {
  print(l)
  l <- function(x) x * 2
  print(l)
  l(10)
}
print(l)
# function(x) x + 1
m()
# function(x) x + 1
# function(x) x * 2
# <environment: 0x7f8da5ac3b58>
# [1] 20
print(l)
# function(x) x + 1

l在给定示例中,您正在调用函数m(),在函数m()中,您正在调用函数l()R将首先在函数环境中搜索,然后搜索调用它的环境,以便在调用函数之前选择第二个函数。必须定义函数。这就是为什么在函数定义之后调用函数。在给定示例中,调用函数m()和函数m()时您正在调用函数l()R将首先在函数环境中搜索,然后搜索调用它的环境,以便在调用函数之前选择第二个函数必须定义函数,这就是函数定义之后调用函数的原因非常感谢…您还可以告诉我什么是环境:0x7f8。。。输出就是这样,我正在尝试相同的打印和调试操作,它不断弹出而不是值?@VinayakBakshi这表明函数是在
m
中定义的,而不是在全局环境中定义的。如果你对R环境的更多细节感兴趣,有。非常感谢…还可以告诉我dis环境:0x7f8。。。输出就是这样,我正在尝试相同的打印和调试操作,它不断弹出而不是值?@VinayakBakshi这表明函数是在
m
中定义的,而不是在全局环境中定义的。如果您对R中环境的更多详细信息感兴趣,那么有。