【发布时间】:2012-08-13 18:59:44
【问题描述】:
我正在尝试将数据框从 R 转换为文本文件。
数据集约为 1500 x 700,循环遍历数据帧需要一段时间,我想知道是否有任何方法可以加快处理速度。
我的数据框是这样的:
>train2
score x1 x2 x3 x4 x5 ... x700
0 0 1 1 1 0 0
1 0 1 0 0 0 0
0 1 0 1 1 1 0
3 0 1 1 1 0 0
1 0 1 0 1 0 0
2 1 1 1 1 0 1
0 0 1 1 0 0 0
... . . . . . .
在创建的文件中,我只包含非零的单元格。
所以第 1-3 行的输出将是:
0 | x2:1 x3:1 x4:1
1 | x2:1
0 | x1:1 x3:1 x4:1
我当前的代码是这样运行的:
pt1 <- paste(train2$score," | ",sep="")
collect1 <- c()
for(j in 1:nrow(train2)){
word1 <- pt1[j]
for(i in 10:ncol(train2)){
if(train2[j,i] !=0){
word1 <- paste(word1,colnames(train2)[i],":",train2[j,i], " ", sep="")
}
}
collect1 <- c(collect1, word1)
if(j %% 100 == 0){
print(j);flush.console()
gc()
}
}
每次运行大约需要 3-4 分钟。有什么明显的改善性能的方法吗?
编辑:循环完成后,生成的数据框collect1 用于创建文本文件:
write(collect1, file="outPut1.txt")
【问题讨论】:
-
将
collect1预分配到正确的长度可以节省大量时间。而且您只是打印到控制台,而不是创建文本文件。