评估R

时间:2018-04-16 09:34:33

标签: r math

我有一个包含数学表达式的向量作为向量的第一个索引,见下文

(A+(B*C)/D)

其中 A,B,C D 是我的data.table的字段名称,我现在要添加一个新字段(结果)我的data.table应该按照向量中包含的表达式(上面提供的例子)进行评估

作为一个解决方案,我循环遍历每个记录和数据表的每个字段来计算每一行的值,我认为这可能不是R中的最佳解决方案,所以想检查是否有我的问题的任何其他可能的解决方案。

  
    

我不想使用dt $ A,dt $ B等基本R操作,因为它会减慢进程的速度     我的表达式也是来自闪亮app的用户输入,因此我无法对字段名称进行硬编码

  

感谢帮助。

1 个答案:

答案 0 :(得分:5)

您可以在data.table的环境中评估字符串。作为一个简单的例子:

#parse the text first
express <- parse(text = 'A+(B*C)/D')

#dummy data 
library(data.table)
dt <- data.table(A = runif(5),
                 B = runif(5),
                 C = runif(5),
                 D = runif(5))

#using eval
eval(express, envir = dt)
#[1] 0.2654480 0.6818451 0.7611150 5.5714248 2.8076066