我已经看到在循环或 apply 函数中使用 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)
eval(parse(text = "Larry"))
和打字一样Larry
直接进入你的 R 终端。
> "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(...))
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)