2011-06-13 45 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" 

- 而不是< - 允许你从任何地方访问你的变量,除非你掩盖它与功能另一个变量