You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

R中如何将数据框内存储的公式字符串转换为对应数值

问题原因

你直接在mutate中调用eval(parse(text = formula))时,parse()会将整个formula列的所有字符串解析为多个表达式,而eval()默认仅返回最后一个表达式的执行结果,因此会出现所有行的eval值都相同的错误结果。

解决方案1:按行计算(最便捷)

搭配dplyr的rowwise()按行分组,让每行单独执行表达式解析和计算即可:

library(dplyr)

mydata <- data.frame(
  formula = c("5.89*10^3", "1.28*10^2", "4.11*10^5")
)

mydata <- mydata %>% 
  rowwise() %>% # 按行分组,每行单独执行后续计算
  mutate(eval = eval(parse(text = formula))) %>% 
  ungroup() # 计算完成后取消行分组,避免影响后续操作

运行后eval列的值就是你需要的5890、128、411000。

解决方案2:基础R实现

用sapply逐行遍历处理formula列:

mydata$eval <- sapply(mydata$formula, function(x) eval(parse(text = x)))
更安全的实现(规避eval风险)

如果你的所有表达式都是系数*10^指数的固定格式,可以拆分字符串直接计算,不需要执行表达式解析,避免恶意代码执行风险:

library(dplyr)
library(tidyr)

mydata <- mydata %>% 
  separate(formula, into = c("coef", "exp"), sep = "\\*10\\^", convert = TRUE) %>% 
  mutate(eval = coef * 10^exp)

内容的提问来源于stack exchange,提问作者MDStat

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.09.25 12:27:00