gpt4 book ai didi

r - 在 purrr :map call 中对函数使用准引号参数

转载 作者:行者123 更新时间:2023-12-04 15:52:52 24 4
gpt4 key购买 nike

我在弄清楚准引用时遇到了一些麻烦,特别是我有一个函数,它接受一个参数,该参数指定哪个变量应该进入模型,然后在 purrr::map 调用中运行。

我一直在工作:https://dplyr.tidyverse.org/articles/programming.html

# libs
library(tidyverse)
library(broom)
# dummy data
df <- data.frame(
"a"=rep(c("alpha","beta"),50),
"b"=rnorm(100),
"value1"=rnorm(100),
"value2"=rnorm(100)
)

model <- function(var) {
var <- enquo(var)
df %>%
group_by(a) %>%
nest() %>%
mutate(model=map(data, ~ lm(b ~ (!! var),data=.)))
}

model(value1)

> Error in mutate_impl(.data, dots) : Evaluation error: invalid model formula.

直接输入名称会如预期的那样工作:

df %>%
group_by(a) %>%
nest() %>%
mutate(model=map(data, ~ lm(b ~ value1,data=.))) %>%
unnest(model %>% map(glance))

我可以使用!!函数内的 var:

modelX <- function(var,df=df) {
var <- enquo(var)
df %>%
select(!! var)
}

modelX(value1,df)

我假设这与 !! var 指的是嵌套 tibble data 中的一个值,我一直在研究 rlang::qq_show() 但没能做到到目前为止弄清楚'

最佳答案

enquo() 将尝试跟踪您传入的符号的环境,但您并不真的希望将其包含在您传递给 lm 的公式中>。最好将其捕获为符号而不是 quosure。试试这个

model <- function(var) {
var <- ensym(var)
df %>%
group_by(a) %>%
nest() %>%
mutate(model=map(data, ~ lm(b ~ !!var, data=.)))
}

使用 dplyr_0.7.6purrr_0.2.5 为我工作

关于r - 在 purrr :map call 中对函数使用准引号参数,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/53120171/

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