Я хочу передать weights
в glm()
через функцию без необходимости использования методов eval(substitute())
или do.call()
, но с использованием rlang
.
Это описывает более сложную базовую функцию.
# Toy data
mydata = dplyr::tibble(outcome = c(0,0,0,0,0,0,0,0,1,1,1,1,1,1),
group = c(0,1,0,1,0,1,0,1,0,1,0,1,0,1),
wgts = c(1,1,1,1,1,1,1,1,1,1,1,1,1,1)
)
# This works
glm(outcome ~ group, data = mydata)
# This works
glm(outcome ~ group, data = mydata, weights = wgts)
library(rlang)
# Function not passing weights
myglm <- function(.data, y, x){
glm(expr(!! enexpr(y) ~ !! enexpr(x)), data = .data)
}
# This works
myglm(mydata, outcome, group)
# Function passing weights
myglm2 <- function(.data, y, x, weights){
glm(expr(!! enexpr(y) ~ !! enexpr(x)), `weights = !! enexpr(weights)`, data = .data)
}
# This doesn't work
myglm2(mydata, outcome, group, wgts)
(отметьте галочкой).
Я знаю, что весовой аргумент здесь неверный, я пробовал много разных способов сделать все это безуспешно.Фактическая функция будет передана в версию purrr:map()
или purrr:invoke()
, поэтому я хочу избежать простого do.call()
.Мысли высоко ценятся.