R: скользящая корреляция / нестандартная оценка

Я пытаюсь вычислить скользящую корреляцию для таблицы, повторяя имена столбцов в цикле. Я, кажется, пытаюсь передать переменные в функцию, хотя. Это работает:

tbl <- tibble(date = seq(as.Date("1983-03-31"), by=7, length.out=100), 
    col1 = 1:100, col2 = sample(100, size = 100, replace=TRUE), col3 = col1 + col2)
tbl %>% 
    tq_mutate_xy(
        x = col1,
        y = col3,
        mutate_fun = runCor,
        n = 10,
        use = "pairwise.complete.obs",
        col_rename = "col1_col3_corr"
      )

Но это не так:

tbl <- tibble(date = seq(as.Date("1983-03-31"), by=7, length.out=100), 
    col1 = 1:100, col2 = sample(100, size = 100, replace=TRUE), col3 = col1 + col2)
c1 <- "col1"
c2 <- "col3"
tbl %>% 
    tq_mutate_xy(
        x = !!c1,
        y = !!c2,
        mutate_fun = runCor,
        n = 10,
        use = "pairwise.complete.obs",
        col_rename = paste0(c1, "_", c2, "_corr")
    )

Ошибка "Ошибка в check_x_y_valid(data, x, y): x =!(! C1) неверное имя".

Что я делаю неправильно?

1 ответ

Решение

Во-первых, я думаю, что вы хотите нестандартную оценочную (NSE) версию tq_mutate_xy -- то есть, tq_mutate_xy_, В результате, когда вы используете NSE этих функций, вам нужно использовать символьные строки - это означает, что ваш mutate_fun переменная также должна быть символьной строкой. Следующее должно работать:

c1 <- "col1"
c2 <- "col3"
tbl %>% 
  tq_mutate_xy_(
    x = c1,
    y = c2,
    mutate_fun = "runCor",
    n = 10,
    use = "pairwise.complete.obs",
    col_rename = paste0(c1, "_", c2, "_corr")
  )

Обязательно посмотрите пример 5 из справочной документации, ?tq_mutate_xy

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