我想在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"
我不确定为什么会这样,任何输入都会很棒,谢谢:)
答案 0 :(得分:2)
函数内的ls
查看函数的环境,而不是父环境。
尝试ls([stuff], envir=.GlobalEnv
无耻插件:请查看包lstype
中lssize
和cgwtools
的来源(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)