对于模拟研究,我想将一个样本的结果保存在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.
答案 0 :(得分:2)
你真的看过输出文件吗?
转储将变量名称与赋值给文件一起写入。这意味着当您要求dump("xy")
时,它会写出
xy <- ...
当你再次运行它时,它会将输出附加到同一个文件,因此最终会写入
xy <- ...
xy <- ...
所以你刚刚定义变量xy
两次,最后一个值获胜。 append
选项不会将数据附加到文件中的每个元素,它只会在文件末尾添加更多文本。在再次转储数据之前,您需要自己读取/合并数据。
但是,如果要转储data.frame,最好使用write.table
并使用append=T
和read.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)