探测全局变量来调用函数内部

时间:2014-02-05 16:38:40

标签: r function global-variables

我希望在函数内部传递.Globalenv内的变量。基本上将x个数据帧连接成矩阵。

这是一些虚拟代码;

Alpha <- data.frame(lon=124.9167,lat=1.53333)

Alpha_2 <- data.frame(lon=3.13333, lat=42.48333)

Alpha_3 <- data.frame(lon=-91.50667, lat=27.78333)

myfunc <- function(x){
     vars <- ls(.GlobalEnv, pattern=x)
     mat <- as.matrix(rbind(vars[1], vars[2], vars[3]))
     return(mat)
}

调用myfunc('Alpha')时,我希望在您运行时返回相同的内容;

as.matrix(rbind(Alpha, Alpha_2, Alpha_3)

        lon      lat
1 124.91670  1.53333
2   3.13333 42.48333
3 -91.50667 27.78333

任何指针都将不胜感激,谢谢!

1 个答案:

答案 0 :(得分:2)

您可以使用get按名称检索变量。我们在此处使用lapply循环执行此操作,然后使用rbind将它们绑定在一起。

myfunc <- function(x){
  vars <- ls(.GlobalEnv, pattern=x)
  df <- do.call(rbind, mget(vars, .GlobalEnv))  # courtesy @Roland
  return(df)
}
myfunc("Alpha")

#         lon      lat
# 1 124.91670  1.53333
# 2   3.13333 42.48333
# 3 -91.50667 27.78333

注意,在实践中,您可能希望检查与模式匹配的变量实际上是您认为的变量,但这会为您提供所需的粗略工具。

旧版本(第二行功能):

df <- do.call(rbind, lapply(vars, get, envir=.GlobalEnv))