我依靠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)的重复问题。这个问题是香草加入的问题。这是关于如何在函数中使用环境变量来实现联接的
。答案 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
#...
#...