首页 文章

R:滚动相关/非标准评估

提问于
浏览
2

我试图在一个tibble上计算滚动相关性,在循环中迭代列名 . 不过,我似乎正在努力将变量传递给函数 . 这有效:

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 回答

  • 3

    首先,我想你想要 tq_mutate_xy 的非标准评估(NSE)版本 - 即 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

相关问题