Этот вопрос является продолжением предыдущего вопроса, который я задал Объединение данных на основе пользовательского ввода в R .Было рекомендовано хранить мои данные в списках, а не как отдельные элементы в глобальной среде.Поэтому я пытаюсь импортировать все похожие типы файлов (например, .csv) в список списков.Каждый вложенный список представляет один из нескольких временных рядов .csv файлов.В настоящее время это работает с использованием следующего кода:
ImportData <- function(mypattern,...)
{
mypattern <- readline(prompt = "Enter File Type:")
temp <- list.files(".", pattern=mypattern)
myfiles <- lapply(temp, fread, skip = 1)
names(myfiles) <- gsub("-.*", "", temp)
header <- c("index","DateTime", "Voltage")
myfiles <<- lapply(myfiles, setNames, header)
}
ImportData()
Следующим шагом является объединение списков данных временных рядов с аналогичными именами, которые представляют данные с одного сайта.После запуска вышеуказанной функции myfiles
содержит списки с именами, такими как ASW1.csv, ASW1_10Sept.csv, ASW1_2017, а также другие с различными сокращениями (например, CSW).Моя цель с помощью приведенной ниже функции - предложить пользователю ввести имя сайта (например, ASW1) и для каждого списка в списке myfiles
имя, содержащее ASW1, объединить и отсортировать по дате в новый список с именем ASW1 внутри myfiles
.Затем пользователь может вызвать все данные с определенного сайта.
CombineData <- function()
{
Site <- invisible(readline(prompt = "Enter Site Name:"))
myfiles[[Site]] <<- rbindlist(mget(apropos(Site), inherits = TRUE))
}
CombineData()
Проблема, с которой я сталкиваюсь, заключается в том, что при запуске CombineData
в myfiles
добавляется пустой список, а не тот, который содержит все данныеиз любого списка с именем, указанным в Site
.Я могу вручную комбинировать списки:
ASW1 <- myfiles[c(1,2,3,4)]
ASW1 <- rbindlist(ASW1)
, но моя цель - сделать этот процесс максимально автоматизированным.В предыдущей версии моего кода я использовал следующее, чтобы захватить все, содержащее определенное имя do.call(rbind, mget(ls(pattern = "^ASW1")))
, но очевидно, что при работе со списками должно быть что-то другое.
Любая помощь с сортировкой этого будет принята с благодарностью!