我试图自动化某些动物能量需求的计算,其中我在饲料,每日饲料摄入量等天数中输入了输入。我的代码首先在CSV的初始数据中读取,使用它来计算循环之外的一些起始值,在feed上运行当天的能量计算的循环,将这些结果存储在数据框架中,然后将最终数据框架写入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是eartag#,将其读取,计算出来,然后自动输出,并在Resultes x.csv中使用结果来自动输出。。如果有帮助,则eartag编号在" ID"列下的原始输入文件中。因此,对于绵羊1:150,我有结果1:150 etc
稍后,我需要能够重新读取这些结果文件,在特定日期提取输出,然后将其拉入数据框架以进行比较,但这是我获得所有这些之后的下一步通过模型运行的文件。
您需要循环浏览文件名并执行每个文件的现有代码,因此解决方案可以看起来像:
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)
}
因此,您基本上将一个循环围绕代码缠绕,并用文件名作为反变量。