如何将字符串解析为真正的等式
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=
部分 ...
我正在尝试将字符串转换为实数方程。例如:我当前的字符串是
> 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=
部分 ...