gpt4 book ai didi

r - 简单的嵌套函数和 dplyr tidyeval

转载 作者:行者123 更新时间:2023-12-01 11:14:59 27 4
gpt4 key购买 nike

library(tidyverse)
set.seed(1)
graph.data <- tibble(cal.date = as.Date(40100:40129, origin = "1899-12-30"),
random_num = rnorm(30, 8, 5))

这是我们在这里使用的数据框。
# A tibble: 30 x 2
cal.date random_num
<date> <dbl>
1 2009-10-14 4.87
2 2009-10-15 8.92
3 2009-10-16 3.82
4 2009-10-17 16.0
5 2009-10-18 9.65
6 2009-10-19 3.90
7 2009-10-20 10.4
8 2009-10-21 11.7
9 2009-10-22 10.9
10 2009-10-23 6.47
# ... with 20 more rows

我试图嵌套(sp?词法范围)两个函数,我称之为 child_functionparent_function .
child_function <- function(df, variable, hor.line = 6) {  
variable <- enquo(variable)
df <- mutate(mutation = 2 * !!variable, horizontal.line = hor.line)
}

parent_function <- function(df, date, variable, hor.line = 6) {
date <- enquo(date)
variable <- enquo(variable)
hor.line <- enquo(hor.line)
df <- child_function(df, !!variable, !!hor.line) %>% print()
p <- ggplot(df, aes(date, mutation)) +
geom_point() +
geom_hline(aes(yintercept = !!hor.line))
p
}

当我用下面的行测试它时,我得到“错误!变量:无效的参数类型”。
parent_function(graph.data, date = cal.date, variable = random_num, hor.line=8)

我想我没有使用正确的 dplyr tidyeval 语法。我的功能有什么问题?

最佳答案

需要进行一些清理,但现在它应该可以工作了:

library(tidyverse)
set.seed(1)
graph.data <- tibble(cal.date = as.Date(40100:40129, origin = "1899-12-30"),
random_num = rnorm(30, 8, 5))

child_function <- function(df, variable, hor.line = 6) {
variable <- enquo(variable)
df <- mutate(df, mutation := 2 * !! variable, horizontal.line := hor.line)
}

parent_function <- function(df, date, variable, hor.line = 6) {
date <- enquo(date)
variable <- enquo(variable)

df <- child_function(df, !! variable, hor.line) %>% print()

p <- ggplot(df, aes(!! date, mutation)) +
geom_point() +
geom_hline(aes(yintercept = hor.line))
p
}

parent_function(graph.data, date = cal.date, variable = random_num, hor.line=8)

我认为主要问题是有时你把 !!enquo在没有必要的地方,反之亦然。

关于r - 简单的嵌套函数和 dplyr tidyeval,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/53265879/

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