如何使用环境变量执行dplyr连接

时间:2020-09-09 12:25:05

标签: r dplyr

我依靠https://dplyr.tidyverse.org/articles/programming.html创建交互式的整洁功能。这些依赖于环境变量(如本文所称),例如以下示例。

Type inference failed: Not enough information to infer parameter T in 
fun <T : Nothing!> defaultRequest(requestBuilder: RequestBuilder) : T
Please specify it explicitly.

但是,当我尝试使用@Component class ApiKeyHeaderMockMvcBuilderCustomizer<T :Nothing?> : MockMvcBuilderCustomizer { override fun customize(builder: ConfigurableMockMvcBuilder<*>) { val apiKeyRequestBuilder: RequestBuilder = MockMvcRequestBuilders.get("any") .header("api-key-header", "apikeyvalue") builder.defaultRequest<T>(apiKeyRequestBuilder) } } 进行类似的方法时,会收到错误消息。下面是可复制的示例。

var_summary <- function(data, var) {
  data %>%
    summarise(n = n(), min = min({{ var }}), max = max({{ var }}))
}
mtcars %>% 
  group_by(cyl) %>% 
  var_summary(mpg)
#> `summarise()` ungrouping output (override with `.groups` argument)

使用环境变量在自定义函数中执行dplyr连接的正确方法是什么?


请注意,这不是How to join (merge) data frames (inner, outer, left, right)的重复问题。这个问题是香草加入的问题。这是关于如何在函数中使用环境变量来实现联接的

1 个答案:

答案 0 :(得分:0)

left_join或加入一般需要的字符值。因此,将您的功能更改为:

library(dplyr)
foobarjoin <- function(table, joincol) {
       iris %>% left_join(table, by = c("Species" = joincol))
}

,您可以将其称为:

foobarjoin(table = foobar, joincol = "fooname")

#    Sepal.Length Sepal.Width Petal.Length Petal.Width    Species value
#1            5.1         3.5          1.4         0.2     setosa    20
#2            4.9         3.0          1.4         0.2     setosa    20
#3            4.7         3.2          1.3         0.2     setosa    20
#4            4.6         3.1          1.5         0.2     setosa    20
#5            5.0         3.6          1.4         0.2     setosa    20
#6            5.4         3.9          1.7         0.4     setosa    20
#7            4.6         3.4          1.4         0.3     setosa    20
#8            5.0         3.4          1.5         0.2     setosa    20
#...
#...
相关问题