首页 > 解决方案 > 双括号(即 {{}}、大花括号)在 tidyr::complete() 和 tidyr::nesting() 中不起作用

问题描述

我不能让双括号(即,{{}}卷曲)在我自己的函数中tidyr::complete()tidyr::nesting()在我自己的函数中使用。此代码有效:

library(tidyverse)

cw_subset <- ChickWeight[, c("Chick", "Time", "weight")]

cw_complete <- cw_subset %>% 
  complete(Time = seq(min(Time), max(Time), by = 1), 
           nesting(Chick))

但是,如果我尝试创建一个函数来做同样的事情:

complete_data <- function(x, variable){
  x %>% 
    complete(Time = seq(min(Time), max(Time), by = 1), 
             nesting({{variable}}))
}

cw_complete <- cw_subset %>% 
  complete_data(variable = Chick)

我收到以下错误:

Error in eval_tidy(dots[[i]], data = out) : object 'variable' not found

有什么想法吗?

标签: rtidyr

解决方案


你可以写成complete——

library(dplyr)
library(tidyr)

complete_data <- function(x, variable){
  x %>%  complete(Time = seq(min(Time), max(Time), by = 1), {{variable}})
}

cw_complete  <- cw_subset %>%  complete_data(variable = Chick)

要使用nesting,您可以使用ensym-

complete_data <- function(x, variable){
  x %>% 
    complete(Time = seq(min(Time), max(Time), by = 1), 
             nesting(!!ensym(variable)))
}

推荐阅读