如何将字符串解析为真正的等式

How to parse a string into real equation

我正在尝试将字符串转换为实数方程。例如:我当前的字符串是

> a<-"y = 31.563 + 5.923*x1 + 5.061*x2 - 0.662*x3 - 0.381*x4"
> class(a)
[1] "character"

现在,我有一个新的数据集:

x1=3 
x2=3
x3=4
x4=7
df_new = data.frame(x1,x2,x3,x4)

我想根据等式得到 y 的值。所以我需要将该字符串转换为实数方程。有人知道怎么做吗?

在我的评论中,我提到您可以使用函数。好吧,我现在不会触及该解决方案,但会为您提供另一个使用 expression.

## define expression
expr <- expression(31.563 + 5.923 * x1 + 5.061 * x2 - 0.662 * x3 - 0.381 * x4)
## sample data
df <- data.frame(x1 = runif(5), x2 = runif(5), x3 = runif(5), x4 = runif(5))
## evaluate your expression in data frame environment 
y <- eval(expr, df)

@Ben 使用了 eval()parse() 的组合,这是另一个常用技巧。如果你真的想从一个字符串string开始,或者你给了这样一个字符串而别无选择,那么你必须先做parse(text = string)让它成为一个表达式。我的回答确实假设您可以自己输入方程式,在这种情况下使用 expression 非常好。

这可能不是最好的方法,但eval(parse(...))可行:

a <- "y = 31.563 + 5.923*x1 + 5.061*x2 - 0.662*x3 - 0.381*x4"
df_new <- data.frame(x1=3,x2=3,x3=4,x4=7)
eval(parse(text=gsub("y =","",a)),df_new)

我不太确定如何从 eval() 获取返回值,所以我去掉了 y= 部分 ...