Простой цикл через большие xts дает фатальную ошибку

Я пытаюсь добавить переменную, которая отслеживает рекордный максимум временного ряда. Приведенный ниже код не работает: R обнаруживает фатальную ошибку во время цикла for. Я не совсем понимаю, что здесь не так.

Редактировать: Теперь еще более странно. Иногда это работает, а иногда нет.

library(quantmod)
GSPC_df <- getSymbols("^GSPC", src = "yahoo", auto.assign = FALSE,
                      from = "1927-12-30")
GSPC_df$GSPC.ATH <- GSPC_df$GSPC.Close
for (i in (2:nrow(GSPC_df))){
  GSPC_df$GSPC.ATH[i] <- max(GSPC_df$GSPC.Close[i], GSPC_df$GSPC.ATH[i - 1])
}

И - если это работает - это намного медленнее, чем (возможно, не так) эквивалентная операция с обычным фреймом данных:

library(quantmod)
GSPC_df <- as.data.frame(getSymbols("^GSPC", src = "yahoo", auto.assign = FALSE,
                      from = "1927-12-30"))
GSPC_df$GSPC.ATH <- GSPC_df$GSPC.Close
for (i in (2:nrow(GSPC_df))){
  GSPC_df$GSPC.ATH[i] <- max(GSPC_df$GSPC.Close[i], GSPC_df$GSPC.ATH[i - 1])
}

А твоя ошибка? И какие-нибудь примерные данные могут быть? Кроме того, «если я подумываю об использовании цикла for в R, возможно, есть лучший способ» — это полезный принцип. Подозреваю, что это именно тот случай: взгляните на dplyr::lag.

Limey 08.08.2024 12:00

@Limey Ошибка в том, что RStudio дает сбой. Я включил сообщение выше. Используемые данные должны быть доступны каждому. Я посмотрю на dplyr::lag, но мне все равно будет интересно узнать, почему описанное выше иногда не работает.

Řídící 08.08.2024 12:07

Я бы попробовал GSPC_df$GSPC.ATH = cummax(GSPC_df$GSPC.Close), это должно быть на несколько порядков быстрее вашего цикла.

Gregor Thomas 08.08.2024 13:24
Стоит ли изучать PHP в 2023-2024 годах?
Стоит ли изучать PHP в 2023-2024 годах?
Привет всем, сегодня я хочу высказать свои соображения по поводу вопроса, который я уже много раз получал в своем сообществе: "Стоит ли изучать PHP в...
Поведение ключевого слова "this" в стрелочной функции в сравнении с нормальной функцией
Поведение ключевого слова "this" в стрелочной функции в сравнении с нормальной функцией
В JavaScript одним из самых запутанных понятий является поведение ключевого слова "this" в стрелочной и обычной функциях.
Приемы CSS-макетирования - floats и Flexbox
Приемы CSS-макетирования - floats и Flexbox
Здравствуйте, друзья-студенты! Готовы совершенствовать свои навыки веб-дизайна? Сегодня в нашем путешествии мы рассмотрим приемы CSS-верстки - в...
Тестирование функциональных ngrx-эффектов в Angular 16 с помощью Jest
В системе управления состояниями ngrx, совместимой с Angular 16, появились функциональные эффекты. Это здорово и делает код определенно легче для...
Концепция локализации и ее применение в приложениях React ⚡️
Концепция локализации и ее применение в приложениях React ⚡️
Локализация - это процесс адаптации приложения к различным языкам и культурным требованиям. Это позволяет пользователям получить опыт, соответствующий...
Пользовательский скаляр GraphQL
Пользовательский скаляр GraphQL
Листовые узлы системы типов GraphQL называются скалярами. Достигнув скалярного типа, невозможно спуститься дальше по иерархии типов. Скалярный тип...
0
3
50
1
Перейти к ответу Данный вопрос помечен как решенный

Ответы 1

Ответ принят как подходящий

Используйте cummax, как показано. Возврат Zoo из getSymbols улучшит последующую обработку имени, но в остальном аналогичен использованию xts. В конце конвертируем в xts. Эта последняя строка является необязательной.

library(magrittr)
library(quantmod)

stock <- "^GSPC" %>%
  getSymbols(auto.assign = FALSE, return.class = "zoo") %>%
  na.omit %>%
  transform(ATH = cummax(Cl(.))) %>%
  as.xts   # optional

Это довольно гладко. Это не совсем работает, если (второй экземпляр) «stock» еще не определен. И он пропускает «от», что в данном случае имеет значение. Но в остальном очень полезно. Есть идеи, в чем проблема с рассматриваемым кодом?

Řídící 08.08.2024 15:52

Иметь фиксированный код. Код в вопросе, кажется, работает для меня. Вы используете старую версию Quantmod или R?

G. Grothendieck 08.08.2024 16:07

И quantmod, и R свежие.

Řídící 08.08.2024 16:11

Попробуйте без RStudio, просто R.

G. Grothendieck 08.08.2024 16:29

6 ОК из 6 попыток! (Хотя все еще очень медленно.)

Řídící 08.08.2024 16:43

Первый в вопросе с использованием R (без RStudio). Тем временем я пытаюсь придумать, как дать новой переменной имя ATH, потому что она (ваша версия) теперь дает GSPC.Close.1.

Řídící 08.08.2024 16:57

Еще раз пересмотрел решение. Кажется, проблема с именованием исчезнет, ​​если мы будем использовать Zoo вместо xts, поэтому мы добавили return.class = "zoo", а затем в конце конвертировали в xts.

G. Grothendieck 08.08.2024 18:28

Другие вопросы по теме

Как установить дату начала рабочей недели на месяц с помощью Python?
Как согласовать набор данных временных рядов с общими торговыми днями среди них и удалить другие дни
Построение еженедельных данных с помощью base::plot с уникальными и равномерно расположенными метками
Что означает: приведение данных Pandas к numpy dtype объекта. Проверьте входные данные с помощью np.asarray(data) и как это можно решить?
Как получить доступ к именам строк и столбцов (год и месяц) из (месячных) временных рядов, когда имена строк и столбцов не работают?
Разложение сигнала с помощью пользовательского тренда
Проверьте наличие существующих данных перед записью в базу данных
Агрегировать ежедневные растровые данные по неделям в R
Как найти события во временном окне из таблицы SQL «ключ/значение»?
Метрика оценки для настройки параметров для обнаружения выбросов (обучение без учителя) во временных рядах