我在R中有一个带有2列的data.frame df,我需要根据另一列中的值使用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
我得到了意想不到的结果:
Col1 Col2
------------------------------
20.31 - 20.80 -0.26
51.81 - 52.22 -0.26
44.07 - 44.88 -0.26
42.94 - 43.47 -0.26
18.93 - 19.15 -0.26
27.42 - 27.68 -0.26
答案 0 :(得分:3)
如果你传递eval
一个表达式向量,它只会返回最后一个结果。我不确定为什么这是理想的行为,但这就是?eval
帮助页面上记录的方式:
(函数返回)评估对象的结果:对于表达式向量,这是评估最后一个元素的结果。
因此,您可以通过友好的sapply
声明解决此问题。
sapply(df$Col1, function(x) eval(parse(text=x)))
这应该会为您提供您期望的结果向量。