我已经看到在循环或应用函数中使用eval-parse的引用,但我仍然不清楚如何使用它。为了帮助像我这样的初学者理解它,有人可以解释为什么下面的第一部分(没有eval-parse)有效,而第二部分(有了它)没有?这是eval-parse用于什么类型的东西?谢谢!
myfunc <- function(x){
cat("Current x:", x, "\n")
cat("Current index in myvec:", "\n")
print(which(myvec == x))
}
myvec <- c("Larry", "Moe", "Curly")
lapply(myvec, myfunc)
myfunc <- function(x){
cat("Current x:", x, "\n")
cat("Current index in myvec:", "\n")
print(which(eval(parse(text = x)) == x))
}
myvec <- c("Larry", "Moe", "Curly")
lapply(myvec, myfunc)
答案 0 :(得分:2)
eval(parse(text = "Larry"))
与直接在您的R终端输入Larry
相同。
> "Text"
[1] "Text"
> eval(parse(text = "Text"))
Error in eval(expr, envir, enclos) : object 'Text' not found
> Text = 1:10
> eval(parse(text = "Text"))
[1] 1 2 3 4 5 6 7 8 9 10
它实质上允许您通过字符串中的名称调用对象。尽管大多数有经验的R用户发现在list
中存储数据消除了对eval(parse(...))
的大多数需求,但您不知道自己需要哪个对象的内部功能非常有用。 }