R dump()函数的Append = TRUE选项

时间:2014-06-05 13:52:15

标签: r append dump

对于模拟研究,我想将一个样本的结果保存在R文件中,然后使用下一个样本的结果附加此文件。

为了实现这一点,我使用函数dump()。要使用下一个模拟的数据附加文件,我想使用此函数的append = TRUE选项。但是,这个功能对我不起作用。

当我模拟数据时,将其保存为R文件(通过使用转储功能),然后使用append = TRUE选项再次执行此操作,转储功能会覆盖数据并且不会附加文件。

我做错了什么?

为了说明问题,这是我的示例代码:

#Simulate data 
x <- rnorm(10)
y <- rnorm(10)
xy <- data.frame(x,y)

#Dump into R file "xy.R" with option append = TRUE
dump("xy",file="xy.txt", append =TRUE)
rm(xy)  # remove the dataset form current environment

#Retrieve data from file: 
source("xy.R")
xy #100 rows

#Run the code again: Still 100 rows and not 200 as expected. 
#Old data is overwritten, new data is not appended.

1 个答案:

答案 0 :(得分:2)

你真的看过输出文件吗?

转储将变量名称与赋值给文件一起写入。这意味着当您要求dump("xy")时,它会写出

xy <- ...

当你再次运行它时,它会将输出附加到同一个文件,因此最终会写入

xy <- ...
xy <- ...

所以你刚刚定义变量xy两次,最后一个值获胜。 append选项不会将数据附加到文件中的每个元素,它只会在文件末尾添加更多文本。在再次转储数据之前,您需要自己读取/合并数据。

但是,如果要转储data.frame,最好使用write.table并使用append=Tread.table。这对你来说更可能是正确的行为。像

这样的东西
#Simulate data 
x <- rnorm(10)
y <- rnorm(10)
xy <- data.frame(x,y)

fn<-"xy.txt"
if(file.exists(fn)) {
    xy <- rbind(read.table(fn), xy)
}
write.table(xy,file=fn)
rm(xy)  # remove the dataset form current environment

#Retrieve data from file: 
xy <- read.table(fn)

或者

#Simulate data 
x <- rnorm(10)
y <- rnorm(10)
xy <- data.frame(x,y)

fn<-"xy.txt"
if(file.exists(fn)) {
    write.table(xy, file=fn, row.names=F, col.names=F, append=T)
} else {
    write.table(xy, file=fn, row.names=F, col.names=T)
}
rm(xy)  # remove the dataset form current environment

#Retrieve data from file: 
xy <- read.table(fn, header=T)