2016-01-20 123 views
1

我有一个函数可以在每次迭代时生成一个新行并将其追加到data.frame将行追加到R中的数据帧文件中

我需要在每次迭代后将data.frame保存在磁盘上。但是,不是每次都存储所有data.frame,这是时间和资源消耗,我只想将新行添加到data.frame文件中。

我已使用write.table()append = true但我重复了我的名字。此行的id始终保持为1.

回答

3

为什么不尝试在内存中保留数据帧,直到函数完成其迭代,然后再写入数据帧一次。要将数据行添加到数据帧中,可以使用rbind(ds, row) 其中ds是数据帧,而行是数据行。 R中rbind功能结合新行的数据帧

如果你必须在每次迭代之后将数据写入到磁盘,你可以尝试用sink()append=true

+1

什么是'ds.rbind'? –

+0

对不起,没有解释,请参阅编辑 –

+0

我认为你正在混合Python语法和R语法,不是吗? –

0

我不得不承认,我不明白你为什么不会先处理数据帧然后保存,但我想你有你的理由。一步一步地处理数据帧肯定是慢的,但我认为你知道这一点。如果需要逐行处理,可以使用如下结构:

sink("output.txt") #open a sink file, will be created in your working directory 
        #if it does not exist yet 
for(i in 1:n){ 
    df[i,]<-operations(input) #create the next data frame row 
    cat(df[i,])     #save that row to output.txt 
    cat('\n')     #create a new line (for the next df-row) 
} 

sink() #closes your sink file 
+0

使用'sink'是一个大锤,使调试更难 - 我强烈建议不要这样做。只需打开一个普通文件并将其传递给'cat'。 (你甚至不需要打开一个文件,这足以将文件名传递给'cat',另外还有'append = TRUE'参数,但这可能会慢很多。) –

+0

非常感谢你的评论,我没有意识到这一点 - 调试时会遇到什么样的麻烦?你知道这些问题的原因是什么吗? –

+0

问题在于,在调用'sink()'来恢复输出重定向之前,控制台上不会显示任何内容。所以,如果你试图调试循环,你不能直观地检查任何值。 –

相关问题