使用R中的get(ls())检索环境值
我想用R编写一个简单的函数,解析使用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(
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返回函数的本地变量的名称”