如何在R中定义全局变量(文本)

时间:2011-06-13 12:34:44

标签: r variables

我想在函数中开发一个变量作为参数,比如

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"

2 个答案:

答案 0 :(得分:4)

我认为你应该能够通过使用以下语法来实现这一目标:

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

使用&lt;&lt; - 而不是&lt; - 允许您从任何地方访问变量,除非您在具有其他变量的函数中将其掩盖

答案 1 :(得分:2)

实现这一目标有多种可能性,具体取决于您想要走多远。最简单的方法是在全局环境中分配变量W,然后从那里调用其他脚本。这确实打败了一个功能的目的。

最直接的解决方案是在local=TRUE调用中使用source选项。这允许源脚本在函数的本地环境中进行搜索。

插图:给出一个文件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的{​​{1}},并找到mynewfunc在本地环境中分配的W mynewfunc 1}}:

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

最强大的选择是在包中执行此操作。基本上你在包的一个源文件中声明它们。常量W将被加载,并可由该包中的所有函数使用。如果使用命名空间,则可以决定是要导出常量,还是将其保持为隐藏状态,以便只能由自己的函数访问。有关这方面的更多信息,请参阅“编写R扩展”。

在函数中获取脚本文件是处理不同函数的不太健壮的方法。您可以获得非常意外的结果,具体取决于工作区中的变量。如果你想尝试这个,我绝对建议你开始考虑构建自己的包。如果不涉及C代码,这是非常简单的。