Переопределение нескольких временных рядов одновременно в R - PullRequest
0 голосов
/ 13 марта 2019

У меня 37 временных рядов, и у каждого есть 9 столбцов. Я хочу отставать 3 из этих 9 столбцов.

Предположим, что мои временные ряды называются TS1.xts, ..., TS37.xts, и я хочу сделать

TS1.xts$col1 <- lag.xts( TS1.xts$col1 )
TS1.xts$col1 <- lag.xts( TS1.xts$col1 )
TS1.xts$col3 <- lag.xts( TS1.xts$col3 )

По логике вещей, я не то, чтобы написать этот кусок 37 раз. У меня есть список

time.series <- c('TS1', ... , 'TS37')

И я попытался

for(ts in time.series){
  assign(paste0(ts, '.xts$col1'), lag.xts( parse(text=paste0(ts, '.xts$col1'))));
  assign(paste0(ts, '.xts$col2'), lag.xts( parse(text=paste0(ts, '.xts$col2'))));
  assign(paste0(ts, '.xts$col3'), lag.xts( parse(text=paste0(ts, '.xts$col3')))); }

Но R продолжает выдавать следующую ошибку: '}' неожиданно в "}".

Я не понимаю, что это значит, и понятия не имею, как сделать этот код другим способом. Я также пытался оценить выражение внутри lag.xts() с помощью eval()

Любая помощь приветствуется.

1 Ответ

0 голосов
/ 13 марта 2019

Попробуйте использовать get() внутри lapply для извлечения объекта по имени из окружения, а затем обновите первые три столбца каждого элемента. Результатом будет список, равный time.series с измененными объектами.

time.series <- paste0("TS", 1:37, ".xts")

lag_TS_list <- lapply(time.series, function(ts)
                       within(get(ts), {
                            col1 <- lag.xts(col1)
                            col2 <- lag.xts(col2)
                            col3 <- lag.xts(col3)                      
                      })
               )

В качестве альтернативы используйте mget(), чтобы получить список элементов и перебрать объекты:

TS_list <- mget(paste0("TS", 1:37, ".xts"))

lag_TS_list <- lapply(TS_list, function(ts)
                       within(ts, {
                            col1 <- lag.xts(col1)
                            col2 <- lag.xts(col2)
                            col3 <- lag.xts(col3)                      
                      })
               )
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...