将CSV文件系列读取到R中,运行函数,将输出写入新文件

时间:2019-05-08 06:52:29

标签: r loops csv

我正在尝试自动计算一些动物的能量需求,其中我需要输入诸如饲料天数,每日饲料摄入量等信息。我的代码首先从CSV读取初始数据,并使用它来计算外部的一些初始值循环,对进食时间进行当天能量计算的循环,将这些结果存储在数据框中,然后将最终数据框写入CSV。

我以这样的个人记录为基础,收集了超过300只羊的数据,并希望自动读取文件,并将结果写入特定文件夹中的单独CSV文件。我知道这意味着一个循环中的一个循环,但我正在尝试弄清楚该如何进行。

我知道我需要使用files.list读取文件,如下所示:

files = list.files("C:/Users/Me/Desktop/Sheepfiles/", pattern = "Sheep+.*csv")

但是我希望每个文件都作为其自己的数据帧贯穿模型运行,并且我需要使所有内容分开进出。

setwd("C:Users/....../Sheepfiles")


input =  read.csv(file = "Sheep131.csv", header = TRUE, sep =",")
#set up initialized values outside loop here
LWt0 = input$LWT[1]
EBW = LWT0*.96*.891
#constants go here


Results = NULL;
timefeed = input$DOF

#now the loop
for (i in timefeed) 
{

#differential equations and calculations here

 results1 = (c(t, NEG, MEI, OldMEI, HPmaint, EBW, ID, TRT))
 names(results1) = c("DOF", "NEG", "MEI", "OldMEI","HPmaint", "EBW", "ID", "TRT")

 print((results1))
 Results = rbind(Results,results1)


#update variables to new values here

}
write.csv(Results, file = "Results131.csv")

我要的是让他们能够以SheepX的名义保存文件,每只绵羊一个,其中X是耳标#,将其读入,计算出来,然后将结果自动输出到ResultsX.csv中。如果有帮助,则耳标编号在原始输入文件的“ ID”列下。所以对于羊1:150,我会有结果1:150,等等

稍后,我将需要能够重新读取这些结果文件,在特定日期提取输出,然后将其拉入数据框以与观测值进行比较,但这是获得所有这些之后的下一步文件在模型中运行。

1 个答案:

答案 0 :(得分:1)

您需要遍历文件名并为每个文件执行现有代码,因此解决方案如下:

setwd("C:Users/....../Sheepfiles")

files = list.files("C:/Users/Me/Desktop/Sheepfiles/", pattern = "Sheep+.*csv")

for (i in files) {
  input =  read.csv(file = i,
                    header = TRUE,
                    sep = ",")
  #set up initialized values outside loop here
  LWt0 = input$LWT[1]
  EBW = LWT0 * .96 * .891
  #constants go here


  Results = NULL

  timefeed = input$DOF

  #now the loop
  for (i in timefeed)
  {
    #differential equations and calculations here

    results1 = (c(t, NEG, MEI, OldMEI, HPmaint, EBW, ID, TRT))
    names(results1) = c("DOF", "NEG", "MEI", "OldMEI", "HPmaint", "EBW", "ID", "TRT")

    print((results1))
    Results = rbind(Results, results1)


    #update variables to new values here

  }

  # automatically generate filename for results
  result.filename <- gsub("Sheep", "Results", i)

  write.csv(Results, file = result.filename)
}

因此,您基本上将for循环包装在代码周围,文件名作为反变量。