不,我不相信这是可能的。 UPDATE嗯,我现在认为它是可能。见下文。
执行功能f
时,会创建一个本地环境,该环境最初具有参数值(在您的情况下为无)。 x
的分配发生在该地区的环境中。
如果你修改f
你可以达到你想要的效果。这里有几个选择:
# Simply return the value:
f <- function() {
x <- 3
x # returns x. return(x) also works fine.
}
f() # returns 3
# Assign to global env
f <- function() {
x <<- 3 # Assigns in global env - but see help("<<-") for details
}
f()
x # 3
# Return the local environment
f <- function(foo=13) {
x <- 3 # local assignment
environment() # return the local environment
}
e <- f()
e$x # 3
e$foo # 13
请注意,您原有的f
版本还返回3,但看不见 - 从默认的作业结果是一种无形的价值。还有一个特殊的功能,invisible
为:
f <- function(){
x <- 3
}
print(f()) # 3
a <- f()
a # 3
invisible(42) # won't show...
print(invisible(42)) # ...but it's there!
UPDATE关于它的思考多一点,当然这是可能的。 让我们做一个更有趣的功能:
f <- function(a, b) {
cat("I got",a,"and",b,"\n")
x <- a+b
}
# Ensure there is no x to prove that the following works...
rm(x)
# First assign the input parameters to f.
a <- 5
b <- 3
# Then evaluate the body.
eval(body(f))
x # 8
为什么你想这样做? – 2012-01-27 15:53:56
同意w/DHeffernan。如果你想从函数环境返回一个变量,在函数内部使用'return(x)'。 (或者做可变环境分配的复杂事情) – 2012-01-27 16:05:41
我想知道你最近想做的事情是把你的代码放在一个脚本文件中,而不是一个函数,然后'source()'它? – joran 2012-01-27 16:10:45