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