使用R中的get(ls())检索环境值

时间:2014-12-12 15:58:01

标签: r environment-variables

我想在R中编写一个简单的函数来解析ls()中的变量并获取它们的值。但是,我不知道自从我运行以下代码后我做错了什么:

a <- 1
b <- 2
l <- c("a", "b")
get_val <- function(x){
  for(i in 1:length(x)){
    print(paste(x[i]))
    if(x[i] %in% ls()){
      print(paste(x[i], "value is", get(ls()[which(ls() %in% x[i])])))
    }
  }
}

get_val(l)

仅返回

> get_val(l)
[1] "a"
[1] "b"

而如果我只在函数内运行for循环:

  for(i in 1:length(l)){
    print(paste(l[i]))
    if(l[i] %in% ls()){
      print(paste(l[i], "value is", get(ls()[which(ls() %in% l[i])])))
    }
  }

我正确

[1] "a"
[1] "a value is 1"
[1] "b"
[1] "b value is 2"

我不确定为什么会这样,任何输入都会很棒,谢谢:)

2 个答案:

答案 0 :(得分:2)

函数内的ls查看函数的环境,而不是父环境。

尝试ls([stuff], envir=.GlobalEnv

无耻插件:请查看包lstypelssizecgwtools的来源(my github上提供的最新版本)。

答案 1 :(得分:1)

“a”和“b”(1和2)的当前值确实保留在函数环境中,但不保留在值名​​称中,因此当您在%ls()中调用x [i]%时,名称没有找到这些值。 Yout“if”不被视为

除了明显的原因之外,这也会起作用

    l <- c("a", "b")

     get_val <- function(x){
     a <- 1
     b <- 2 
     for(i in 1:length(x)){
          print(paste(x[i]))
          if(x[i] %in% ls() ){
               print(paste(x[i], "value is", get(ls()[which(ls() %in% x[i])])))
          }
     }
}

get_val(l)