小编典典

评估作为字符串给出的表达式

all

我很想知道 R 是否可以使用它的eval()函数来执行由例如字符串提供的计算。

这是一个常见的情况:

eval("5+5")

但是,我得到的不是 10:

[1] "5+5"

有什么解决办法吗?


阅读 81

收藏
2022-04-11

共1个答案

小编典典

eval()函数计算一个表达式,但"5+5"它是一个字符串,而不是一个表达式。使用parse()withtext=<string>将字符串更改为表达式:

> eval(parse(text="5+5"))
[1] 10
> class("5+5")
[1] "character"
> class(parse(text="5+5"))
[1] "expression"

调用eval()会调用许多行为,有些行为并不明显:

> class(eval(parse(text="5+5")))
[1] "numeric"
> class(eval(parse(text="gray")))
[1] "function"
> class(eval(parse(text="blue")))
Error in eval(expr, envir, enclos) : object 'blue' not found

另请参阅。

R 使用函数来实现 try-catch 块:

语法有点像这样:

result = tryCatch({
    expr
}, warning = function(warning_condition) {
    warning-handler-code
}, error = function(error_condition) {
    error-handler-code
}, finally={
    cleanup-code
})

在 tryCatch() 中有两个可以处理的“条件”:“警告”和“错误”。编写每个代码块时要了解的重要一点是执行状态和范围。

2022-04-11