gpt4 book ai didi

r - 将 CSV 输出放入数据框中的最快方法是什么?

转载 作者:行者123 更新时间:2023-12-04 15:35:02 25 4
gpt4 key购买 nike

我有一个程序可以输出我想要加载到数据框中的 CSV 数据行。
我目前像这样加载数据:

tmpFilename <- "tmp_file"
system(paste(procName, ">", tmpFilename), wait=TRUE)
myData <- read.csv(tmpFilename) # (I also pass in colClasses and nrows for efficiency)

但是,我认为将输出重定向到一个文件只是为了从中读取是低效的(程序吐出大约 30MB,所以我想以最佳性能处理它)。我以为 textConnection会解决这个问题,所以我试过:
con <- textConnection(system(procName, intern=TRUE))
myData <- read.csv(con)

然而,这运行速度要慢得多,而第一个解决方案随着输入大小线性下降, textConnection解决方案的性能似乎呈指数级下降。最慢的部分是创建 textConnection . read.csv这里实际上比第一个解决方案完成得更快,因为它是从内存中读取的。

我的问题是,创建一个文件只是为了运行 read.csv就速度而言,我的最佳选择是什么?有没有办法加快创建 textConnection 的速度?奖励:为什么创建 textConnection 这么慢?

最佳答案

“最快的方式”可能涉及使用 read.csv 以外的其他内容。但是,坚持使用 read.csv,使用管道可能是要走的路:

myData <- read.csv(pipe(procName))

它避免将全文输出读入中间缓冲区(至少在 read.csv 获得它之前)。

一些时序比较:
> write.csv(data.frame(x=rnorm(1e5)), row.names=FALSE, file="norm.csv")
> system.time(d <- read.csv("norm.csv"))
user system elapsed
0.398 0.004 0.402
> system.time(d <- read.csv(textConnection(system("cat norm.csv", intern=TRUE))))
user system elapsed
56.159 0.106 56.095
> system.time(d <- read.csv(pipe("cat norm.csv")))
user system elapsed
0.475 0.012 0.531

关于r - 将 CSV 输出放入数据框中的最快方法是什么?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/16600770/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com