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

问题描述 投票:0回答:1

这是我的函数

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

你能帮助我吗?

r apply lapply
1个回答
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)
© www.soinside.com 2019 - 2024. All rights reserved.