Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/maven/6.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 范围——如果存在同名的局部变量,如何在父环境中计算对象?_R_Environment Variables - Fatal编程技术网

R 范围——如果存在同名的局部变量,如何在父环境中计算对象?

R 范围——如果存在同名的局部变量,如何在父环境中计算对象?,r,environment-variables,R,Environment Variables,如果有两个使用相同变量名的嵌套环境,如何获取外部环境的值 我很难想出正确的方法来实现这一点。我在eval内部尝试了parent.frame(x)和sys.frame(x)的一些变体。如有任何建议,将不胜感激 例如: outerFunc <- function() { obj <- "Outer Object" innerFunc() } innerFunc <- function() { # A local variable with same name is

如果有两个使用相同变量名的嵌套环境,如何获取外部环境的值

我很难想出正确的方法来实现这一点。我在eval内部尝试了
parent.frame(x)
sys.frame(x)
的一些变体。如有任何建议,将不胜感激


例如:

outerFunc <- function() { 
  obj <- "Outer Object"
  innerFunc()
}

innerFunc <- function() {
  # A local variable with same name is created
  obj <- "Inner Object"

  # would like to grab the value of obj from the outer environment
  obj.callingFunc <- eval(obj, envir=sys.frame(-1))

  cat(obj.callingFunc)  # gives "Inner Object" instead of "Outer Object"
} 

> outerFunc()
Inner Object
关于在
get()
vs
eval()
中引用的效果,您有什么想法吗




outerFunc将您的
eval
更改为
evalq
,或者在调用eval时引用
obj
。正如obj在被赋予
eval
之前被评估一样,它有内部值,引用它说将表达式(而不是值)传递给
eval
进行评估。

你能解释为什么明显的解决方案不可用吗?感觉上你是在问我们一个关于解决你真正问题的特定方法的问题,而不是告诉我们你真正的问题。“也许还有更好的方法。”Aaron,我希望完成的是学习如何在不同的环境中使用变量。最后我的评论是为了避免提供解决方案的诱惑,这些解决方案提供相同的最终结果,但不提供知识:)上述功能只是为了测试和学习,不代表手头的任何问题。里卡多:我赞扬你的努力。R评估的内部工作是一个很少有人理解的领域(我并不把自己包括在理解它的小组中)。我猜可能有一些人在50到200之间理解得很好。引用:
get
以字符串作为输入,
eval
接受调用或表达式。向函数提供错误的输入不太可能使其工作。@Ricardosporta,我引用的意思是类似于
eval(quote(obj),…
。我应该更具体一些。一如既往地感谢您的详细回答。+1为我指明了语言对象,这有助于澄清
quote()的返回值
我认为在评论中使用“调用”环境而不是“外部”环境会有所帮助-您需要区分词法范围(即如何定义函数)和动态范围(如何调用函数)。外部环境有点含糊不清。
outerFunc <- function() { 
  obj <- "Outer Object"
  innerFunc()
}

innerFunc <- function() {
  # A local variable with same name is created
  obj <- "Inner Object"

  # would like to grab the value of obj from the outer environment
  cat( get('obj', envir=parent.frame()) )

   } 

 outerFunc()
#Outer Object
outerFunc <- function() { 
  obj <- "Outer Object"
  innerFunc()
}

innerFunc <- function() {
  # A local variable with same name is created
  obj <- "Inner Object"

  # would like to grab the value of obj from the outer environment
  cat( get('obj', envir=parent.frame()) )

   } 

 outerFunc()
#Outer Object