Nano Hash - криптовалюты, майнинг, программирование

Попытка повторить один и тот же код для нескольких фреймов данных

У меня есть следующий код, который берет кадр данных с именем dft1, а затем создает результирующий кадр данных с именем dfb1. Я хочу повторить один и тот же код для нескольких входных фреймов данных, таких как dft1, dft2, все индексированные числом ближе к концу, а затем сохранить результаты с использованием одного и того же шаблона, т.е. dfb1, dfb2, .... Я пробовал много методов, таких как использование dapply или для циклов, но, учитывая характер кода внутри, я не смог получить ожидаемые результаты.


#define the function for rolling

window <- 24
rolling_lm <- 
  rollify(.f = function(R_excess, MKT_RF, SMB, HML) {
    lm(R_excess ~ MKT_RF + SMB + HML)
  }, window = window, unlist = FALSE)

#rolling over the variable 

dfb1 <-
  dft1 %>% 
  mutate(rolling_ff = 
           rolling_lm(R_excess, 
                      MKT_RF, 
                      SMB, 
                      HML)) %>% 
  mutate(tidied = map(rolling_ff, 
                      tidy, 
                      conf.int = T)) %>% 
  unnest(tidied) %>% 
  slice(-1:-23) %>% 
  select(date, term, estimate, conf.low, conf.high) %>% 
  filter(term != "(Intercept)") %>% 
  rename(beta = estimate, factor = term) %>% 
  group_by(factor)
27.03.2019


Ответы:


1

Добавьте команду, которую вы хотите применить к каждому кадру данных в функции

apply_fun <- function(df) {
   df %>% 
    mutate(rolling_ff = 
         rolling_lm(R_excess, 
                    MKT_RF, 
                    SMB, 
                    HML)) %>% 
    mutate(tidied = map(rolling_ff, 
                    tidy, 
                    conf.int = T)) %>% 
    unnest(tidied) %>% 
    slice(-1:-23) %>% 
    select(date, term, estimate, conf.low, conf.high) %>% 
    filter(term != "(Intercept)") %>% 
    rename(beta = estimate, factor = term) %>% 
    group_by(factor)
}

Теперь примените функцию к каждому кадру данных и сохраните результаты в списке.

n <- 10
out <- setNames(lapply(mget(paste0("dft", 1:n)), apply_fun), paste0("dfb", 1:n))

Предполагая, что у вас есть входные кадры данных, такие как dft1, dft2... это выведет список кадров данных, к которым вы теперь можете получить доступ, выполняя out[['dfb1']], out[['dfb2']] и так далее. Измените значение n в зависимости от количества имеющихся у вас фреймов данных dft.

Если данные уже присутствуют в списке, мы можем избежать mget, выполнив

setNames(lapply(result, apply_fun), paste0("dfb", 1:n))
27.03.2019
  • Большое спасибо за Вашу помощь. Я получаю сообщение об ошибке, когда пытаюсь запустить код: Ошибка в mget(paste0(dft), 1:n): второй аргумент должен быть средой Также есть способ сделать то же самое, но когда ваши кадры данных находятся в списке, например У меня есть список с именем result {dft1, dft2, ....}. Я хочу применить свою функцию к списку и получить результаты в виде списка фреймов данных {dfb1, dfb2,...}. 27.03.2019
  • @ErwinRhine команда mget используется для внесения отдельных фреймов данных в сам список, поэтому, если они у вас уже есть, то это хорошо. Вы могли бы сделать setNames(lapply(result, apply_fun), paste0("dfb", 1:n)). Можете ли вы попробовать и дайте мне знать, если это работает? Также в mget попытке я потерял скобку, она должна была быть setNames(lapply(mget(paste0("dft", 1:n)), apply_fun), paste0("dfb", 1:n)) 27.03.2019
  • Большое спасибо, оба метода сработали, я буду придерживаться списка, так как это намного проще. 27.03.2019
  • Новые материалы

    Кластеризация: более глубокий взгляд
    Кластеризация — это метод обучения без учителя, в котором мы пытаемся найти группы в наборе данных на основе некоторых известных или неизвестных свойств, которые могут существовать. Независимо от..

    Как написать эффективное резюме
    Предложения по дизайну и макету, чтобы представить себя профессионально Вам не позвонили на собеседование после того, как вы несколько раз подали заявку на работу своей мечты? У вас может..

    Частный метод Python: улучшение инкапсуляции и безопасности
    Введение Python — универсальный и мощный язык программирования, известный своей простотой и удобством использования. Одной из ключевых особенностей, отличающих Python от других языков, является..

    Как я автоматизирую тестирование с помощью Jest
    Шутка для победы, когда дело касается автоматизации тестирования Одной очень важной частью разработки программного обеспечения является автоматизация тестирования, поскольку она создает..

    Работа с векторными символическими архитектурами, часть 4 (искусственный интеллект)
    Hyperseed: неконтролируемое обучение с векторными символическими архитектурами (arXiv) Автор: Евгений Осипов , Сачин Кахавала , Диланта Хапутантри , Тимал Кемпития , Дасвин Де Сильва ,..

    Понимание расстояния Вассерштейна: мощная метрика в машинном обучении
    В обширной области машинного обучения часто возникает необходимость сравнивать и измерять различия между распределениями вероятностей. Традиционные метрики расстояния, такие как евклидово..

    Обеспечение масштабируемости LLM: облачный анализ с помощью AWS Fargate и Copilot
    В динамичной области искусственного интеллекта все большее распространение получают модели больших языков (LLM). Они жизненно важны для различных приложений, таких как интеллектуальные..