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

为何在R中遍历数据框列比遍历同等向量耗时更长?

为什么遍历大型DataFrame元素比遍历同等向量慢?

我在R中处理一个包含2310000行的大型data frame时,发现直接遍历data frame列元素的循环速度极慢。为此我对比了遍历同等大小vector的耗时,测试代码如下:

df = data.frame(matrix(0, nrow = 2310000, ncol = 1))

t0 = Sys.time()

# iterating on data frame
df$var = 0
for (i in 1:100) {
  df$var[i] = 1
}

t1 = Sys.time()

# iterating on vector
df$var = 0
v_var = df$var
for (i in 1:100) {
  v_var[i] = 1
}
df$var = v_var

t2 = Sys.time()

print(t1 - t0) ; print(t2 - t1)

测试输出:

Time difference of 0.1035166 secs
Time difference of 0.0075109 secs

核心原因解释

  • DataFrame列访问有额外解析开销:DataFrame本质是向量组成的列表,但每次通过df$var[i]访问元素时,R需要先从DataFrame的结构中定位到对应列向量,这个解析过程比直接访问独立向量多了一层查找逻辑,会产生额外耗时。
  • 修改DataFrame会触发结构校验:修改df$var[i]时,R会自动检查DataFrame的完整性,比如列长度是否匹配、数据类型是否一致等,这些校验步骤在操作独立向量时完全不存在。
  • 列表索引的底层复杂度:DataFrame属于列表结构,其索引机制的底层实现比向量索引更复杂,需要处理更多属性与环境信息。单次操作的微小差异在循环中被放大,最终形成明显的时间差。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.25 09:23:22