使用lapply运行函数时,如何在文本文件中逐行写入输出?

时间:2020-06-06 17:38:03

标签: r apply lapply

这是我的职责

Mc_bval<-function(filename){
  cat <- read.table(paste(cat_file, sep=""), header=TRUE)
  mag <- cat$Magnitude
  mag <- cat$Magnitude
  Mc_bootstrap <- numeric(nbsample)
  for(i in 1:nbsample) Mc_bootstrap[i] <- maxc(sample(mag, replace=TRUE),mbin)$Mc
  Mc_mean <- mean(Mc_bootstrap, na.rm=TRUE)
  Mc_sd <- sd(Mc_bootstrap, na.rm=TRUE)
  mag_b <- mag[mag>=Mc_mean]
  b <- b.guten(mag_b, Mc_mean)
  return(list(c(b=b),Mc=Mc_mean,Mc_sd=Mc_sd))
  #return(c(b=b,Mc))
}

函数正在返回值,我想通过读取文件列表中的每个文件名。 我想为每个文件(包括文件名)写一行输出 这是我尝试过的代码

filelist = list.files(pattern="*$.csv$")
outfile <- file("checkout.txt","w")
#apply(random_data, 2, checkfun, fileConn=outfile)

out = lapply(filelist,FUN = Mc_bval)
close(outfile)

输出文件看起来会像这样

cata_extract1.csv 1.46 0.25 4.15 0.33
cata_extract2.csv 1.44 0.35 4.25 0.23
cata_extract3.csv 1.4  0.25 4.25 0.24
cata_extract4.csv 1.34 0.85 4.25 0.23

你能帮我吗?

1 个答案:

答案 0 :(得分:1)

这是根据您所拥有的一个可行的示例。我创建了一个示例函数,该函数接受filename并返回包含名称长度和随机数的列表。

lapply之后,您可以使用writeLines输出文件名和列表结果(将列表结果转换为字符向量)。在这种情况下,您可以使用第二个paste来连接两个向量。

我希望它可以适合您的使用。

my_fun <- function(filename) {
  a = nchar(filename)
  b = sample(10,1)
  return(list(a, b))
}

filelist = list.files(pattern="*.csv")
outfile <- file("checkout.txt", "w")

out <- lapply(filelist, FUN = my_fun)

writeLines(paste(filelist, unlist(lapply(out, paste, collapse=" "))), outfile)

close(outfile)