2011-06-13 46 views
2

我想開發一個變量函數中的參數一個全局變量(文本),像我如何定義中的R

W<-"Hi I am working on R" #W is the variable, it is the text file 

我要開發的功能就像是getText=function(W){}這個功能得到調用另一個腳本。

則W可以作爲全局變量無處不在的腳本出現W的工可顯示"Hi I am working on R"

+0

是「?源」你在找什麼?您可以在給定文件中定義W,然後在其他腳本中包含source(「scriptThatContainsW.R」)。另外 - 你可以在你的'Rprofile'頁面中定義'W',這樣它總是可用的。 – Chase 2011-06-13 12:40:30

+0

你可以使用'assign(...,pos = globalenv())'將變量及其相應的值賦值給全球環境可以從「無處不在」訪問。 – 2011-06-13 12:50:47

+0

這個分配(...,pos = globalenv())的作品,我試過thx! – Eva 2011-06-14 02:10:06

回答

2

有多種方法可以實現,取決於你想要走多遠。最簡單的方法就是在全局環境中分配變量W,並從那裏調用其他腳本。這確實打敗了功能的目的。

最直接的解決方案是在source調用中使用選項local=TRUE。這允許源腳本在功能的本地環境中搜索。

一個例證:給定一個文件Myscript.r:

cat("In script : ",x," ",W,"\n") 

afunc <- function(y){ 
    cat("within function : ",y," ",W,"\n") 
} 
afunc(x) 

您可以定義源在本地的函數:

mynewfunc <- function(x){ 
    W <- "My W" 
    source("Myscript.R",local=TRUE) 
} 

avar <- "Working in R" 
mynewfunc(avar) 

而且做的事情需要做:它發現x從全球環境傳遞到mynewfunc,它發現在本地環境mynewfunc中分配的W

In script : Working in R My W 
within function : Working in R My W 

儘管在一個包中這樣做最健壯的選擇。基本上你可以在你的軟件包的源文件中聲明它們。常量W將被加載,並且可以被該包中的所有函數使用。如果您使用命名空間,則可以決定是要導出常量,還是將其保留爲隱藏狀態,以便只能通過自己的函數訪問它。有關這方面的更多信息,您可以在「Writing R extensions」中找到。

在函數中採集腳本文件是處理不同函數的不太穩健的方式。您可能會得到非常意想不到的結果,具體取決於工作區中的變量。如果你想嘗試這個,我絕對建議你開始研究構建你自己的軟件包。如果不涉及C代碼,這非常簡單。

4

我想你應該能夠通過使用下面的語法來實現:使用< <

W<<-"Hi I am working on R" 

- 而不是< - 允許你從任何地方訪問你的變量,除非你掩蓋它與功能另一個變量