使用eval函数更新data.frame列

使用eval函数更新data.frame列,r,dataframe,eval,R,Dataframe,Eval,我有一个data.frame df,R中有两列,我需要使用eval函数(或任何其他方式)根据另一列中的值更新其中一列Col1是一个字符列,我需要在Col2中计算表达式并更新结果。 因此,第一排为-0.49,最后一排为-0.26。 我尝试了这种方法,但它使用最后一行的计算结果更新了所有值: df["Col2"] <- eval(parse(text=df$Col1)) Col1 Col2 ------------------------------

我有一个data.frame df,R中有两列,我需要使用
eval
函数(或任何其他方式)根据另一列中的值更新其中一列
Col1
是一个字符列,我需要在
Col2
中计算表达式并更新结果。 因此,第一排为-0.49,最后一排为-0.26。 我尝试了这种方法,但它使用最后一行的计算结果更新了所有值:

df["Col2"] <- eval(parse(text=df$Col1))


Col1                     Col2
------------------------------
20.31 - 20.80            0
51.81 - 52.22            0
44.07 - 44.88            0
42.94 - 43.47            0
18.93 - 19.15            0
27.42 - 27.68            0

如果传递表达式向量,它似乎只返回最后一个结果。我不确定为什么这是期望的行为,但这就是它在
?eval
帮助页面上的记录方式:

(函数返回)计算对象的结果:对于表达式向量,这是计算最后一个元素的结果

因此,您可以通过友好的
sapply
语句来解决这个问题

sapply(df$Col1, function(x) eval(parse(text=x)))

这应该给你你所期望的结果向量。

当然,我会强烈地考虑其他不使用<代码> EVA/COD>函数的选项,特别是在不可信的数据上,因为它可能是潜在的危险。我不知道该列中允许哪些值,但如果它总是数字减去数字,那么最好是在减号上使用
strsplit
,用
as.numeric
解析数字,然后自己进行减法。
sapply(df$Col1, function(x) eval(parse(text=x)))