如何在R中获得更好的性能:一个大文件或几个小文件?
Posted
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了如何在R中获得更好的性能:一个大文件或几个小文件?相关的知识,希望对你有一定的参考价值。
我有大约200个不同的文件(所有这些都是大矩阵,465x1080)(这对我来说很重要)。然后我使用cbind2
使它们成为一个更大的矩阵(465x200000)。
我之所以这样做是因为我需要为每一行创建一个单独的文件(465个文件),我认为R更容易将数据从1个文件加载到内存中只有ONCE,然后只读取每行的行创建一个单独的行每个文件的文件,而不是每行打开和关闭200个不同的文件。
这真的是更快的方式吗? (我很想知道,因为现在它需要做很多事情)。当我从Windows检查任务管理器时,它显示了R使用的RAM,它一直从700MB到1GB到700MB(每秒两次)。好像主文件没有加载一次,但它在每次迭代中都是从内存中加载和擦除的(这可能是它有点慢的原因?)。
我是初学者,所以我写的所有这些都没有任何意义。
这是我的代码:(那些+1和-1是因为原始数据有1个额外的列,我不需要在新文件中)
extractStationData <- function(OriginalData, OutputName = "BCN-St") {
for (i in 1:nrow(OriginalData)) {
OutputData <- matrix(NA,nrow = ncol(OriginalData)-1,3)
colnames(OutputData) <- c("Time","Bikes","Slots")
for (j in 1:(ncol(OriginalData)-1)) {
OutputData[j,1] <- colnames(OriginalData[j+1])
OutputData[j,2] <- OriginalData[i,j+1]
}
write.table(OutputData,file = paste(OutputName,i,".txt",sep = ""))
print(i)
}
}
有什么想法吗?也许我应该在第一个for循环之前创建一个对象(巨大的文件),然后它只会加载一次?
提前致谢。
让我们假设您已经创建了465x200000矩阵,并且有问题的只是extractStationData
函数。然后我们可以修改它,例如:
require(data.table)
extractStationData <- function(d, OutputName = "BCN-St") {
d2 <- d[, -1] # remove the column you do not need
# create empty matrix outside loop:
emtyMat <- matrix(NA, nrow = ncol(d2), 3)
colnames(emtyMat) <- c("Time","Bikes","Slots")
emtyMat[, 1] <- colnames(d2)
for (i in 1:nrow(d2)) {
OutputData <- emtyMat
OutputData[, 2] <- d2[i, ]
fwrite(OutputData, file = paste(OutputName, i, ".txt", sep = "")) # use fwrite for speed
}
}
V2:
如果你的OriginalData
是矩阵格式,这种创建新data.tables列表的方法看起来非常快:
extractStationData2 <- function(d, OutputName = "BCN-St") {
d2 <- d[, -1] # romove the column you dont need
ds <- split(d2, 1:nrow(d2))
r <- lapply(ds, function(x) {
k <- data.table(colnames(d2), x, NA)
setnames(k, c("Time","Bikes","Slots"))
k
})
r
}
dl <- extractStationData2(d) # list of new data objects
# write to files:
for (i in seq_along(dl)) {
fwrite(dl[[i]], file = paste(OutputName, i, ".txt", sep = ""))
}
也应该为data.frame
做一些微小的改变:k <- data.table(colnames(d2), t(x), NA)
以上是关于如何在R中获得更好的性能:一个大文件或几个小文件?的主要内容,如果未能解决你的问题,请参考以下文章