Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/r/68.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
为什么read.csv这么慢?_R_Csv - Fatal编程技术网

为什么read.csv这么慢?

为什么read.csv这么慢?,r,csv,R,Csv,浏览stackoverflow上的问题很长一段时间,发现许多有用的答案,我终于发现了一些我找不到答案的问题。当我遇到一个我可以有意义地贡献的问题时(也许是另一天),我也该开始向社区回馈了 不管怎样,我的第一个问题,所以请对我温柔一点: 我很清楚R中的read.csv函数绝不是读取中数据的最有效方式,许多问题和答案都涉及到read.csv的替代方案,但这个问题的重点略有不同,我想确实有两个问题需要回答 我想知道的是为什么read.csv这么慢?导致其性能不佳的管理费用是什么 此外,我还拥有许多可以

浏览stackoverflow上的问题很长一段时间,发现许多有用的答案,我终于发现了一些我找不到答案的问题。当我遇到一个我可以有意义地贡献的问题时(也许是另一天),我也该开始向社区回馈了

不管怎样,我的第一个问题,所以请对我温柔一点:

我很清楚R中的read.csv函数绝不是读取中数据的最有效方式,许多问题和答案都涉及到read.csv的替代方案,但这个问题的重点略有不同,我想确实有两个问题需要回答

  • 我想知道的是为什么read.csv这么慢?导致其性能不佳的管理费用是什么
  • 此外,我还拥有许多可以测试代码位的计算机,包括带SSD的笔记本电脑和带标准HDD的台式机。在最近的测试中,我无法发现两台机器上的读取时间之间存在明显的差异(我本以为使用固态驱动器时读取时间会快得多),为什么会这样
  • 一些代码重现了我一直在测试的基准类型:

        bm_io = function (runs = 3, n = 1e6, ncol = 1000) {
          set.seed(1)
          on.exit(set.seed(NULL))
          x = rnorm(n)
          m = data.frame(matrix(x, ncol = ncol))
          timings = data.frame(user = numeric(2 * runs), system = 0, 
                       elapsed = 0, test = c("write", "read"))
          for (i in 1:runs) {
            fname = tempfile(fileext = ".csv")
            fname = "temp.csv"
            invisible(gc())
            timings[2 * i - 1, 1:3] = system.time({
              write.csv(m, fname, row.names = FALSE)
            })[1:3]
            timings[2 * i, 1:3] = system.time({
              read.csv(fname)
            })[1:3]
            unlink(fname)
          }
          timings
        }
    

    如果有人对此有任何想法或评论,我将不胜感激。此外,如果我错过了类似的问题,请随时为我指出正确的方向。非常感谢

    一个显著的性能提升是参数
    colClasses
    。性能提升通常是两个因素

    我在读取大型csv文件的代码中通常执行以下步骤:

    • 使用
      nrows
    • 从读取数据帧的列中提取类
    • 使用
      colClasses
    • 如果由于不可预见的数据导致此操作失败,则使用整个数据,而不使用
      colClasses

    您好,感谢您抽出时间回复。我知道
    read.csv
    有许多参数可以提高性能。尽管没有一个能从
    data.table
    包中接近
    fread
    。我的问题更多的是关于是什么原因使得
    read.csv
    与一些备选方案相比速度如此之慢,以及为什么我在从SSD或HDD读取时没有看到预期的差异。