В настоящее время у меня есть программа python, которая выполняет некоторые вычисления временных рядов и отправляет данные в кэш redis. Каждая точка данных представляет собой массив numpy, который выглядит следующим образом:
"[1.18103230e + 07 7.89070000e + 04 -1.88109969e-01 -2.17373938e-01 \ n 1.00433488e + 01 -1.39566174e- 03 -1.95357823e-03 8.36936470e-02 \ n -1.26680427e + 00 -1.85034338e + 00 2.00000000e + 00] "
Затем я хочу, чтобы R вызвал кэш и преобразовал эту строку в фрейм данных или какой-то список. В настоящее время у меня есть это:
len <- as.numeric(as.character(redisLLen(list)))
v <- redisLRange(list, 0, len)
counter <- 1
for (item in v) {
item <- strsplit(gsub("(^\\[|\\]$)", "", v), ",")[[counter]]
item <- strsplit(item, " +")
df <- rbind(df, item)
counter <- counter + 1
}
Это прекрасно работает и нет проблем, но проблема в том, что код R должен работать в режиме реального времени, и это на самом деле очень медленный метод. Есть ли более быстрый способ превратить это значение строки redis в R-фрейм данных? Мы будем благодарны за любую помощь.
ОБНОВЛЕНИЕ:
В моем коде python я убрал квадратные скобки, так что в gsub () в R. было бы меньше удалить. Кроме того, a хороший кусок времени был потрачен на выполнение rbind (). Таким образом, вместо добавления в информационный фрейм, я сделал начальный и вставил элементы. Теперь это точка данных:
"1.18103230e + 07 7.89070000e + 04 -1.88109969e-01 -2.17373938e-01 \ n 1.00433488e + 01 -1.39566174e-03 -1.95357823e-03 8.36936470e -02 \ n -1.26680427e + 00 -1.85034338e + 00 2.00000000e + 00 ",
, и это обновленный код, который я сейчас использую:
len <- as.numeric(redisLLen(list))
v <- redisLRange(list, 0, len-1)
df <- data.frame(matrix(NA, ncol = 8, nrow=len))
counter <- 1
for (item in v) {
item <- unlist(strsplit(item, " +"))
df[counter, 1:ncol(df)] <- item
counter <- counter + 1
}