我有一些需要应用测试的单个文件。我需要找到将每个文件的结果自动写入文件的方法。这是我的工作:
library(ape)
stud_files <- list.files("path/dir/data",full.names = T)
for (f in stud_files) {
df <- read.table(f, header=TRUE, sep=";")
df_xts <- as.xts(df$cola, order.by = as.Date(df$colb,"%m/%d/%Y"))
pet <- testa(df_xts)
res <- data.frame(estimate = pet$estimate,
p.value=pet$p.value,
logi = pet$alternative)
write.dna(res,file = "res_testa.xls",format = "sequential")
}
这个循环运行良好,除了最后一个目标是连续写入每个文件的结果,它只保存了最后一个性能。结果保存为字符串,而不是我在上面定义的表(data.frame)。在这种情况下有什么想法?提前致谢
答案 0 :(得分:2)
检查help(write.dna)
。
write.dna(x,file,format =“interleaved”,append = FALSE, nbcol = 6,colsep =“”,colw = 10,indent = NULL, blocksep = 1)
附加逻辑,如果为TRUE,则数据将附加到文件中 擦除文件中可能存在的数据,否则删除文件(如果 它存在)被覆盖(默认为FALSE)。
设置append = TRUE
,您应该全部设置。
然而,正如一些评论指出的那样,您可能最好生成表格,然后将其全部写入文件。除非您有数十亿个文件,否则您可能不会耗尽内存。
以下是我如何做到这一点。
library(ape)
library(data.table)
stud_files <- list.files("path/dir/data",full.names = T)
sumfunc <- function(f) {
df <- read.table(f, header=TRUE, sep=";")
df_xts <- as.xts(df$cola, order.by = as.Date(df$colb,"%m/%d/%Y"))
pet <- testa(df_xts)
res <- data.table(estimate = pet$estimate,
p.value=pet$p.value,
logi = pet$alternative)
return(res)
}
lres <- lapply(stud_files, sumfunc)
dat <- rbindlist(lres)
write.table(dat,
file = "res_testa.csv",
sep = ",",
quote = FALSE,
row.names = FALSE)