Как использовать «для» l oop в R для создания разных временных рядов - PullRequest
0 голосов
/ 18 марта 2020

Я новичок в R и пытаюсь решить следующее: мне нужно создать 40 разных сезонно скорректированных временных рядов для 40 разных городов. Работающий код для одного временного ряда выглядит следующим образом (в данном случае Стокгольм)

stockholmtsdecomp = stl(stockholmts[,5], window="periodic")

des_stockholmts <- seasadj(stockholmtsdecomp) #

, где стокгольм временного ряда уже существует (как и для других 39 городов)

Как перебирать города? Один из способов решить эту проблему - переписать это 40 раз для каждого города. Я хотел бы сделать это в al oop, чтобы сэкономить время. Я имею в виду (всего 3 города здесь)

lanlist=list('stockholm', 'oslo', 'madrid')

for (i in lanlist)
{
  x=(paste(i,'ts', sep=""))
  y=(paste(i,'tsdecomp', sep=""))
  z=(paste('des_',i,'ts', sep=""))
  y = stl(x[,5], window="periodic")
  z <- seasadj(y)
}

, что, очевидно, не работает. Любое изящное решение?

спасибо!

1 Ответ

0 голосов
/ 19 марта 2020

Вы можете использовать функции as.symbol() и eval(), чтобы извлечь имена переменных, которые вы строите в l oop, в качестве символов языка и оценить их , когда они используются в качестве входных данных (например, x в вашем коде).

Вы можете использовать функцию assign() для создания переменной, имя которой задается переменной , когда они используются в качестве выходных данных (например, y и z в вашем коде).

Вот пример доказательства концепции, который показывает, как это работает с использованием ваших переменных x и z в двух временных рядах, соответствующих двум городам:

oslots = c(3.5, 2.1, 1.7)
madridts = c(1.9, 2.8, 3.1)
lanlist=list('oslo', 'madrid')
for (i in lanlist)
{
  x = paste(i, 'ts', sep="")
  cat("Processing time series '", x, "'...\n", sep="")

  z = paste('des_', i, 'ts', sep="")
  assign(z, eval(as.symbol(x))[1])
  cat("The first value of time series '", x, "' is: ", eval(as.symbol(z)), "\n", sep="")

  cat("\n")
}

, который должен вывести следующее:

Processing time series 'oslots'...
The first value of time series 'oslots' is: 3.5

Processing time series 'madridts'...
The first value of time series 'madridts' is: 1.9

Я надеюсь, вы сможете перенести эти концепции в свой код, который выполняет сезонную и трендовую декомпозицию временных рядов.

...