Как объединить несколько похожих скриптов в один в R? - PullRequest
0 голосов
/ 24 марта 2020

У меня есть 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, выполняет весь тест, но не может распечатать результаты для любого.

Есть ли лучший вариант, который я не пробовал, или кто-нибудь может помочь мне диагностировать мои проблемы? Большое спасибо.

...