我有一个函数可以在每次迭代时生成一个新行并将其追加到data.frame
。将行追加到R中的数据帧文件中
我需要在每次迭代后将data.frame
保存在磁盘上。但是,不是每次都存储所有data.frame
,这是时间和资源消耗,我只想将新行添加到data.frame
文件中。
我已使用write.table()
与append = true
但我重复了我的名字。此行的id始终保持为1.
我有一个函数可以在每次迭代时生成一个新行并将其追加到data.frame
。将行追加到R中的数据帧文件中
我需要在每次迭代后将data.frame
保存在磁盘上。但是,不是每次都存储所有data.frame
,这是时间和资源消耗,我只想将新行添加到data.frame
文件中。
我已使用write.table()
与append = true
但我重复了我的名字。此行的id始终保持为1.
为什么不尝试在内存中保留数据帧,直到函数完成其迭代,然后再写入数据帧一次。要将数据行添加到数据帧中,可以使用rbind(ds, row)
其中ds是数据帧,而行是数据行。 R中rbind功能结合新行的数据帧
如果你必须在每次迭代之后将数据写入到磁盘,你可以尝试用sink()
append=true
我不得不承认,我不明白你为什么不会先处理数据帧然后保存,但我想你有你的理由。一步一步地处理数据帧肯定是慢的,但我认为你知道这一点。如果需要逐行处理,可以使用如下结构:
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
使用'sink'是一个大锤,使调试更难 - 我强烈建议不要这样做。只需打开一个普通文件并将其传递给'cat'。 (你甚至不需要打开一个文件,这足以将文件名传递给'cat',另外还有'append = TRUE'参数,但这可能会慢很多。) –
非常感谢你的评论,我没有意识到这一点 - 调试时会遇到什么样的麻烦?你知道这些问题的原因是什么吗? –
问题在于,在调用'sink()'来恢复输出重定向之前,控制台上不会显示任何内容。所以,如果你试图调试循环,你不能直观地检查任何值。 –
什么是'ds.rbind'? –
对不起,没有解释,请参阅编辑 –
我认为你正在混合Python语法和R语法,不是吗? –