是否有可能使函数识别它们上面的变量?

jcl*_*ncy 2 r

我在R工作,我想做,例如,

printx <- function() {
  x <- 1
  printy()
  return(x)
}

printy <- function() {
  print(x)
}
Run Code Online (Sandbox Code Playgroud)

因为我不想继续传递大量的变量(同样,全球环境中也没有x).有没有办法做到这一点?所有功能都可以访问全局环境,但功能环境与全局环境之间的功能如何?

shh*_*its 5

也许

printx <- function() {
  x <- 1
  printy()
  return(x)
}

printy <- function() {
  print(get('x',envir=parent.frame()))
}

> x<-0
> printy()
[1] 0
> printx()
[1] 1
[1] 1
Run Code Online (Sandbox Code Playgroud)

这将使用与被调用函数的环境相关联的x打印printy.

另一种可能性是创造一个新的环境

e1<-new.env(parent = baseenv())

> assign('x',12,envir=e1)
> x
[1] 0
> get('x',e1)
[1] 12
Run Code Online (Sandbox Code Playgroud)

  • 打败我.做得好.但请注意,这不是一个好主意(http://stackoverflow.com/questions/5526322/examples-of-the-perils-of-globals-in-r-and-stata).传递参数列表会更好,而不是更麻烦. (3认同)