У меня есть 48 сценариев, используемых для очистки данных, соответствующих 48 различным тестам. Протоколы очистки для каждого теста раньше были уникальными и специфичными для теста c, но через некоторое время окончательное руководство проекта позволяет всем тестам использовать один и тот же протокол очистки при условии, что они сохраняют все выходные файлы в соответствующем каталоге (каждый собственный тест папка с результатами). Я пытаюсь объединить эти тесты в один основной сценарий очистки, который может использоваться любым членом команды для очистки данных по мере их сбора или внесения небольших изменений, если у них есть файлы необработанных данных и папка для каждого теста (который я дал бы им).
В настоящее время я попробовал два подхода: первый - включить все необходимые библиотеки в основную часть основного сценария очистки, затем source()
каждый отдельный сценарий очистки. Внутри каждого скрипта библиотеки require()
ed, соответствующие файлы считываются, и код для файлов сохраняется в их правильном месте назначения. Этот метод, кажется, работает лучше всего, но если весь сценарий запущен, некоторые подтесты успешно очищаются и сохраняются в правильных местах, а остальные нужно сохранять отдельно - я не уверен, почему.
library(readr)
library(dplyr)
library(data.table)
library(lubridate)
source("~/SF_Cleaning_Protocol.R")
etc
.
.
Второй - сохранить тело сценария общей очистки как функцию, а затем вызвать эту функцию в серии операторов if
на основе теста, который нужно очистить. Например:
if (testname == "SF"){
setwd("~/SF")
#read in the csv file
subtest<- read_csv()
path_map<- read_csv()
SpecIDs<- read_csv()
CleaningProtocol(subtest,path_map,SpecIDs)
write.csv("output1.csv")
write.csv("output2.csv")
write.csv("output3.csv")
write.csv("output4.csv")
} else if (testname == "EV"){
etc
}
Код считывает и распечатывает файлы нормально, если они выбраны по отдельности, но когда указано имя теста и скрипт запускается целиком, он игнорирует операторы if, выполняет весь тест, но не может распечатать результаты для любого.
Есть ли лучший вариант, который я не пробовал, или кто-нибудь может помочь мне диагностировать мои проблемы? Большое спасибо.