在基本级别,eval-parse在R中做了什么?

时间:2015-03-05 20:48:55

标签: r

我已经看到在循环或应用函数中使用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)

1 个答案:

答案 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(...))的大多数需求,但您不知道自己需要哪个对象的内部功能非常有用。 }