gpt4 book ai didi

r - 在匿名函数内的公式中使用 quosures

转载 作者:行者123 更新时间:2023-12-05 00:12:44 25 4
gpt4 key购买 nike

我正在尝试使用 quosures 在自定义函数中传递变量名称以进行数据处理和在公式中使用,但是我在公式中使用 quosures 是不正确的。有没有更好的方法在公式中取消引用参数?

library(dplyr)
library(broom)
library(purrr)
library(tidyr)

foo <- function(mydata, dv, iv, group_var) {
dv = enquo(dv)
iv = enquo(iv)
group_var = enquo(group_var)

mydata <- mydata %>%
group_by(!!group_var) %>%
nest()

mydata %>%
mutate(model = map(data,
~summary(lm(formula(substitute(dv ~ iv)), data = .))
)) %>%
unnest(model %>% map(tidy))
}

foo(mydata=mtcars, dv=mpg, iv=wt, group_var=cyl)

我的代码产生“mutate_impl(.data, dots) 中的错误:评估错误:对象不是矩阵。”

这是我试图将其变成一个函数的代码的工作版本:
mtcars %>% 
group_by(cyl) %>%
nest() %>%
mutate(model = map(data, ~summary(lm(mpg ~ wt, data = .)))) %>%
unnest(model %>% map(tidy))

最佳答案

您需要使用带有 lm 之类的函数的基本 R 非标准评估可以这么说,它们不是“在 tidyverse 中”。

因此,您可以将内容更改为:

foo <- function(mydata, dv, iv, group_var) {
flma <- as.formula(paste(substitute(dv), "~", substitute(iv)))
group_var = enquo(group_var)

mydata <- mydata %>%
group_by(!!group_var) %>%
nest()

mydata %>%
mutate(model = map(data, ~summary(lm(flma, data = .)))) %>%
unnest(model %>% map(tidy))
}

foo(mtcars, mpg, wt, cyl)

如果你知道你只是在做简单的回归,那很好。为了获得更大的灵活性,只需直接传递公式,如:
foo2 <- function(mydata, flma, group_var) {
group_var = enquo(group_var)

mydata <- mydata %>%
group_by(!!group_var) %>%
nest()

mydata %>%
mutate(model = map(data, ~summary(lm(flma, data = .)))) %>%
unnest(model %>% map(tidy))
}

foo(mtcars, mpg ~ wt, cyl)

关于r - 在匿名函数内的公式中使用 quosures,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/50053035/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com