【发布时间】:2014-12-12 15:58:01
【问题描述】:
我想在 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"
我不太确定为什么会这样,任何输入都会很棒,谢谢:)
【问题讨论】:
-
这是因为
ls()正在返回函数本地环境中的对象。阅读?ls中指定环境的各种方法。 -
...还请注意,
?ls中的描述明确指出了这种行为:“在函数内不带参数调用时,ls 返回函数局部变量的名称”