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

在r中的循环中按顺序写入结果,r,loops,url-rewriting,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

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

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")
}
库(ape)
研究文件检查
帮助(write.dna)

write.dna(x,file,format=“interleaved”,append=FALSE, nbcol=6,colsep=“”,colw=10,缩进=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)
库(ape)
库(数据表)
研究文件检查
帮助(write.dna)

write.dna(x,file,format=“interleaved”,append=FALSE, nbcol=6,colsep=“”,colw=10,缩进=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)
库(ape)
库(数据表)

stud_文件是否可以为每次迭代保存res,然后将它们绑定在一起,并一次性将它们写入文件?尝试在写入时添加“append=TRUE”statement@JarkoDubbeldam:我的想法是在转到下一个文件之前立即保存它。我认为这应该比将它们绑定到一个表中并全部写入的选项更简单,或者?@Hari这取决于,如果将所有结果保留到最后,是否会耗尽内存?是否可以选择保存每次迭代的res,然后将它们绑定在一起并一次性写入文件?尝试添加“append=TRUE”写信给你statement@JarkoDubbeldam:我的想法是在转到下一个文件之前立即保存它。我认为这应该比将它们绑定到一个表中并全部写入的选项更简单,或者?@Hari这取决于,如果你将所有结果保留到最后,你会不会内存不足?非常感谢。结果如下所示:4 1估计值2195 p.value 1.4011934 logi true chang日期1960-05-03当我编写data.frame时,我希望它们出现在表格中,但当我编写data.frame时,我如何将它们保存在表格/data.frame中?谢谢你为什么需要使用
write.dna
?您可以使用
write.csv
write.table
以表格格式输出结果
res
。它有相同的
append=TRUE
参数。我实际上是第一次使用write.dna,目的是在循环中连续写入结果。我尝试了write.table和write.scv或write.xlsx,但它也有同样的问题。只需编辑答案,添加一些代码,先在R中生成表,然后将其写入文件。没有数据文件很难进行测试,但这应该是可行的。太棒了!代码工作得很好。你几乎救了我的命。真的非常感谢。结果如下所示:4 1估计值2195 p.value 1.4011934 logi true chang日期1960-05-03当我编写data.frame时,我希望它们出现在表格中,但当我编写data.frame时,我如何将它们保存在表格/data.frame中?谢谢你为什么需要使用
write.dna
?您可以使用
write.csv
write.table
以表格格式输出结果
res
。它有相同的
append=TRUE
参数。我实际上是第一次使用write.dna,目的是在循环中连续写入结果。我尝试了write.table和write.scv或write.xlsx,但它也有同样的问题。只需编辑答案,添加一些代码,先在R中生成表,然后将其写入文件。没有数据文件很难进行测试,但这应该是可行的。太棒了!代码工作得很好。你几乎救了我的命。真的谢谢你