2012-06-15 69 views
1
結束後,用戶定義的函數中創建

以一個基本功能R-訪問varibales的功能

fun<-function(){ 
x<-c(1,2,3,4,5) 
y<-c(1,2,3,4,5) 

t<-x+y 
return(t) 

} 

我已經運行的功能後,有沒有一種方法,我可以訪問任何功能中創建的變量。無論是通過指定可變這樣的事情:

fun$y 

fun$t 

或者是有要求R鍵拯救我的當前R會話(I」期間使用函數內的變量的一些方法米不想永久保存它)。 AKA東西沿線:

fun<-function(){ 
x<-c(1,2,3,4,5) 
y<-c(1,2,3,4,5) 

t<-x+y 
Y<-save y for latter use 
T<-save T for latter use 
return(t) 

} 

謝謝!

回答

4

您不能在其範圍外使用變量。

你可以做的是使用一個列表從你的函數返回多個值。

這是一個很好的example

+0

也許我錯過了一些重要的東西。但如果我要按照鏈接中的信息添加兩行到上面的代碼「newList <-list(」YY「= y,」XX「= x)」&「return(newList)」 - 執行完函數 - 如果我輸入newList $ XX,我得到消息「Error:object'newList'not found。 – Vinterwoo

+0

@VincentMoriarty再一次,函數不會有(一般情況下)有副作用如果你的函數返回一些東西,你必須爲你的函數的輸出賦值____,例如'result < - fun()'。 – joran

+0

你仍然試圖訪問該函數的局部變量,使用result <-fun()然後結果$ XX。 –

4

是的,沒有。

,在技術上可以將變量賦值給函數範圍之外的變量,以便它們可以在其他地方訪問。通常,這是通過使用<<-來完成的,如果找不到分配的變量,或者調用assign並直接指定環境,則在全局環境中進行分配。

但是......

沒有,你應該做這個。 R是一種功能性語言,這意味着它的使用目的是使其功能不會產生副作用。如果你違反這個原則太多,你將不可避免地遇到難以調試的嚴重問題,如果不是不可能的話。

如Benito所述,如果您在稍後需要的函數中創建變量,則認爲最好將它們全部返回到列表中。