在r的循环中顺序写入结果

时间:2017-07-06 12:55:21

标签: r loops url-rewriting

我有一些需要应用测试的单个文件。我需要找到将每个文件的结果自动写入文件的方法。这是我的工作:

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)。在这种情况下有什么想法?提前致谢

1 个答案:

答案 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)