相关疑难解决方法(0)

快速读取非常大的表作为数据帧

我有非常大的表(3000万行),我想加载为R中的数据帧 read.table()有很多方便的功能,但似乎实现中有很多逻辑会减慢速度.在我的情况下,我假设我提前知道列的类型,表不包含任何列标题或行名称,并且没有任何我必须担心的病态字符.

我知道在表格中阅读作为列表使用scan()可能非常快,例如:

datalist <- scan('myfile',sep='\t',list(url='',popularity=0,mintime=0,maxtime=0)))
Run Code Online (Sandbox Code Playgroud)

但是我将此转换为数据帧的一些尝试似乎将上述性能降低了6倍:

df <- as.data.frame(scan('myfile',sep='\t',list(url='',popularity=0,mintime=0,maxtime=0))))
Run Code Online (Sandbox Code Playgroud)

有没有更好的方法呢?或者很可能完全不同的方法来解决问题?

import r dataframe r-faq

489
推荐指数
9
解决办法
19万
查看次数

使用Rcpp比scan()更快?

从文本文件中读取〜5x10 ^ 6个数字值在我的机器上相对较慢(几秒钟,我读了几个这样的文件),即使有scan(..., what="numeric", nmax=5000)或类似的技巧.尝试Rcpp这种任务的包装器是否值得(例如,Armadillo有一些实用程序来读取文本文件)?或者,由于预期的接口开销,我是否会浪费我的时间在性能上几乎没有收获?我不确定目前限制速度的是什么(内在的机器性能,或者其他?)这是我每天重复多次的任务,通常,文件格式总是相同的,1000列,大约5000行.

如果需要,这是一个要播放的示例文件.

nr <- 5000
nc <- 1000

m <- matrix(round(rnorm(nr*nc),3),nr=nr)

cat(m[1, -1], "\n", file = "test.txt") # first line is shorter
write.table(m[-1, ], file = "test.txt", append=TRUE,
            row.names = FALSE, col.names = FALSE)
Run Code Online (Sandbox Code Playgroud)

更新:我尝试过read.csv.sqlload("test.txt", arma::raw_ascii)使用Armadillo,两者都比scan解决方案慢.

r armadillo rcpp

8
推荐指数
3
解决办法
2745
查看次数

我可以在R中并行读取1个大的CSV文件吗?

我有一个很大的csv文件,阅读需要很长时间.我可以使用"并行"或相关的包在R中并行阅读吗?我尝试过使用mclapply,但它没有用.

csv parallel-processing multithreading r

8
推荐指数
1
解决办法
2199
查看次数