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

使用lapply+eval在R中输出异常,如何实现Python的apply(eval)功能?

在R中复刻Python的eval()解析字符串对象的问题

问题根源

你用R的eval()函数复刻Python的eval()是找错了工具——两者的eval()功能完全不同:

  • Python的eval()专门用来解析字符串形式的Python结构化对象(比如字符串写的列表、字典),把它转成实际可操作的对象
  • R的eval()是用来执行已经被解析成R表达式的对象,根本不负责解析字符串格式的外部结构化数据

你的train$annotation列应该是一串类似"[{'key': val}, ...]"的字符串,直接扔给R的eval(),它会把这个字符串当成R代码去执行,自然得不到你想要的解析结果,反而返回了错误的维度信息。

正确解决方案

根据你的字符串格式,选对应的方法:

情况1:字符串是JSON格式(和Python列表/字典格式兼容)

用jsonlite包的fromJSON()来解析,这是最常用的方案:

# 先安装包(第一次用的话)
install.packages("jsonlite")
library(jsonlite)

# 解析每一行的字符串
train$annotation <- lapply(train$annotation, fromJSON)

情况2:字符串是R风格的列表格式(比如"list(a=1, b=2)")

如果你的字符串是R语法的列表,需要先把字符串转成R表达式,再用eval()执行:

train$annotation <- lapply(train$annotation, function(str) {
  eval(parse(text = str))
})

验证

执行后,train$annotation列就会变成和Python中一样的解析后的结构化对象(列表/嵌套列表),而不是错误的维度信息。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.23 20:02:08