【问题标题】:What is row limit of data frame in R?R中数据框的行数限制是多少?
【发布时间】:2015-06-23 14:32:12
【问题描述】:

我有大约 1500 个 csv 文件要加载到我的 Rstudio。我将一个一个地使用 rbind() 每个 csv 文件。 (使用 for 循环)我预测总行数估计为 160 万。然后我想将完成的数据帧加载到 mySQL 服务器。那么一个数据框中有可能有 160 万行数据吗?

【问题讨论】:

  • 突出显示您的问题。复制,粘贴到搜索引擎。 this 另一个here 除非你有很多空闲时间,否则不要使用 for 循环。
  • 我目前正在使用具有 1433056 行的 data.frame。
  • 使用data.tablefread。类似于dt = rbindlist(lapply(list.files(".", ".csv"), fread, header = T)) 的东西可以读入所有文件
  • 您主要受限于机器上的 RAM。但是你真的不想在 for 循环中 rbind 1500 个 csv 文件。那会很慢。

标签: r rbind


【解决方案1】:

我将一个一个地使用 rbind() 每个 csv 文件。 (使用 for 循环)

这是一个坏主意,因为在 R 中通过迭代调用 rbind 来增长对象非常慢(有关详细信息,请参阅 the second circle of the R inferno)。您可能会发现读取所有文件并在一次调用 rbind 时将它们组合起来更有效:

do.call(rbind, lapply(file.list, read.csv))

一个数据框中可以有 160 万行数据吗?

你可以很容易地找到:

dat <- data.frame(X=rep(0, 1600000))
str(dat)
# 'data.frame': 1600000 obs. of  1 variable:
#  $ X: num  0 0 0 0 0 0 0 0 0 0 ...

您不仅可以初始化一个包含 160 万行的数据框,而且可以在 0.1 秒内完成(在我的机器上)。

【讨论】:

  • 我想知道通过系统调用连接/附加文件并一次读取它是否会更有效?我还没有测试过,但我怀疑即使是对rbind() 的单次调用也会非常缓慢?如果总体目标是将其加载到 MySQL 中,为什么要使用 R 作为中间人呢?我会做一个LOAD DATA INFILE 然后离开。
  • @ForrestR.Stevens 对rbind 的一次调用可能会非常快或非常慢,具体取决于列数。同意 R 仅在 OP 想要在读取文件和输出到 SQL 服务器之间进行一些处理时才在此工作流程中有用。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2015-03-24
  • 2011-04-23
  • 2013-12-29
  • 1970-01-01
  • 2012-07-01
  • 1970-01-01
相关资源
最近更新 更多