我正在尝试自动计算一些动物的能量需求,其中我需要输入诸如饲料天数,每日饲料摄入量等信息。我的代码首先从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,等等
稍后,我将需要能够重新读取这些结果文件,在特定日期提取输出,然后将其拉入数据框以与观测值进行比较,但这是获得所有这些之后的下一步文件在模型中运行。
答案 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循环包装在代码周围,文件名作为反变量。