我正在尝试将字符串转换为实数等式。例如:我当前的字符串是
> 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的值。所以我需要将该字符串转换为实数等式。有人知道怎么做吗?
谢谢!
答案 0 :(得分:4)
这可能不是执行此操作的最佳方式,但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=
部分......
答案 1 :(得分:2)
在我的评论中,我提到你可以使用一个功能。好吧,我现在不会触及那个解决方案,而是使用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
非常好。