如何在r的函数中访问全局变量

时间:2014-01-30 07:22:16

标签: r

这里我使用“<< - ”符号将数据帧temp用作全局变量。我希望获得值全局变量值的变化会影响每个函数。但是它不起作用。

我的代码是

vf<-function()
{
  df<<-data.frame(A=c(2),B=c(3))
  vk(df)
  print(df)
}

vk<-function(df)
{
  lk<-data.frame(C=c(3),D=c(4))
  df<<-cbind(df,lk)
}

函数调用后没有任何反应。

预期产出

>vf()
A  B C D
2  3 3 4

如何解决?

1 个答案:

答案 0 :(得分:1)

实际上,您的代码完美运行:-)如果您想使用全局变量,那么您唯一错过的部分就必须全局声明。

这是我的输出:

> df <- NULL
> vf <- function()
{
  df <<- data.frame(A=c(2),B=c(3))
  vk(df)
  print(df)
}
> vk <- function(df)
{
  lk <- data.frame(C=c(3),D=c(4))
  df <<- cbind(df,lk)
}
> vf()
  A B C D
1 2 3 3 4

所以你错过的是添加df <- NULL声明


你可以做同样的全局变量,它有点清洁:

vf <- function()
{
  df <- data.frame(A=c(2),B=c(3))
  vk(df) # Same as 'return(vk(df))'
}

vk <- function(df)
{
  lk <- data.frame(C=c(3),D=c(4))
  cbind(df,lk) # Same as 'return(cbind(df,lk))'
}

vf() # Returns value, not stored --> printed on the output
newGlobal <- vf() # Stores the value returned by vf()

顺便说一句,如果您对R感兴趣,可以在此处找到有关常见代码段和陷阱的精彩书籍列表:

http://xcafebabe.blogspot.hu/2011/09/free-r-book-collection.html