不,我不相信這是可能的。 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