Я нахожу цикл for и списки достаточно хороши для подобных вещей. Когда у вас есть рабочий набор кода, достаточно легко перейти из цикла в функцию, которая может быть sapply
или похожей, но этот тип векторизации в любом случае уникален и, вероятно, бесполезен вне частных однострочников.
Вы, вероятно, хотите избежать присвоения нескольким объектам с разными именами в рабочей области (это часто задаваемые вопросы, которые обычно называются «как мне назначить () ...»).
Пожалуйста, остерегайтесь моего непроверенного кода.
Вектор имен файлов и список с именованным элементом для каждого файла.
files <- c("AA01.csv", "AA02.csv")
lst <- vector("list", length(files))
names(lst) <- files
Цикл над каждым файлом.
library(timeSeries)
for (i in 1:length(files)) {
## read strings as character
tmp <- read.csv(files[i], stringsAsFactors = FALSE)
## convert to 'timeDate'
tmp$tfrm <- timeDate(paste(tmp$cdt, tmp$ctm),format ="%Y/%m/%d %H:%M:%S"))
## create timeSeries object
obj <- timeSeries(as.matrix(tmp$Value), tmp$tfrm)
## store object in the list, by name
lst[[files[i]]] <- as.xts(obj)
}
## clean up
rm(tmp, files, obj)
Теперь все считанные объекты находятся в lst
, но вы захотите проверить, доступен ли файл, правильно ли он прочитан, и вы можете изменить имена, чтобы они были более понятными, чем просто имя файла. ,
Распечатать первый объект по индексу имени из списка:
lst[[files[1]]]