我有一个包含数学表达式的向量作为向量的第一个索引,见下文
(A+(B*C)/D)
其中 A,B,C 和 D 是我的data.table的字段名称,我现在要添加一个新字段(结果)我的data.table应该按照向量中包含的表达式(上面提供的例子)进行评估
作为一个解决方案,我循环遍历每个记录和数据表的每个字段来计算每一行的值,我认为这可能不是R中的最佳解决方案,所以想检查是否有我的问题的任何其他可能的解决方案。
我不想使用dt $ A,dt $ B等基本R操作,因为它会减慢进程的速度 我的表达式也是来自闪亮app的用户输入,因此我无法对字段名称进行硬编码
感谢帮助。
答案 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