Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/r/74.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
使用R中的get(ls())检索环境值_R_Environment Variables - Fatal编程技术网

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

使用R中的get(ls())检索环境值,r,environment-variables,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(

我想用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)
而如果我在函数中只运行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"

我不太清楚为什么会这样,任何输入都会很棒,谢谢:)

函数中的
ls
看起来是函数的环境,而不是父环境

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


无耻的插件:查看包
cgwtools
(最新版本可在上获得)中
lstype
lssize
的源代码。

您的
ls
在函数中查看的是函数的环境,而不是父环境

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

无耻的插件:看看包
cgwtools
(最新版本可在上获得)中
lstype
lssize
的源代码。

当前的“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)
l函数环境中确实保留了“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)

l这是因为
ls()
正在返回函数的本地环境中的对象。请仔细阅读
?ls
中指定环境的各种方法……还要注意,
?ls
中的描述明确说明了此行为:“当在函数内部没有参数的情况下调用时,ls返回函数的局部变量的名称”这是因为
ls()
正在返回函数的本地环境中的对象。请阅读
?ls
中指定环境的各种方法……还请注意,
?ls
中的描述明确说明了此行为:“在函数内部无参数调用时,ls返回函数的本地变量的名称”