如何使用apply函数替换文本文件中的内容?

时间:2017-09-19 21:57:16

标签: r apply mapply write.table

我有一个文本文件,其中有2个参数 - starttime和endtime。我创建了两个不同时间的向量。我想

  1. 用这些时间替换starttime / endtime
  2. 为每个组合(本例中为3)写出不同的文本文件

    runStart <- lubridate::ymd_hm('2016-01-01 00:00') #Start of the entire run
    st <- runStart + months(0:2) #Start times
    et <- runStart + months(1:3) - lubridate::dhours(1) #End times
    
    mult_one<-function(st,et){
    readLines("template.txt") %>%
    gsub(pattern = "starttime", replace = st) %>%
    gsub(pattern = "endtime", replace = et)
    }
    
    x <- mapply(mult_one,st,et)
    write.table(x[,1],'template_1.txt', row.names = F, col.names = F)
    
  3. 这给了我想要的输出。

    但我想写出函数内的文件。最好自动将template_1.txt, template_2.txt, template_3.txt作为文件名。我怎样才能做到这一点?

    dput(readLines("template.txt"))
    

    下面:

      c("", "\"! ***********************************************************************************************************************\"", 
    "\"simulStart              starttime     ! (01) simulation start time -- must be in single quotes\"", 
    "\"simulFinsh              endtime      ! (02) simulation end time -- must be in single quotes\"", 
    "\"\"", "\"! ***********************************************************************************************************************\""
    )
    

1 个答案:

答案 0 :(得分:0)

根据你问题中的信息,如果我清楚地理解,你想在函数内写3个文件。你可以这样做:

# Adding num_of_files as a third argument in your function. 
mult_one<-function(st,et,num_of_files){
   for (i in 1:num_of_files) {
      readLines("template.txt") %>%
      gsub(pattern = "starttime", replace = st) %>%
      gsub(pattern = "endtime", replace = et)
      write.table(.,paste("template_", num_of_files, ".txt",sep=""),row.names=FALSE,col.names=FALSE)
   }
}

## Then you just call the function in mapply with 3 arguments
x <- mapply(mult_one,st,et,num_of_files)

注意:由于我没有测试数据,因此没有测试代码。但是,我希望这可以帮助你。