首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >简单嵌套函数与dplyr tidyeval

简单嵌套函数与dplyr tidyeval
EN

Stack Overflow用户
提问于 2018-11-12 16:02:48
回答 1查看 332关注 0票数 5
代码语言:javascript
复制
library(tidyverse)
set.seed(1)
graph.data <- tibble(cal.date = as.Date(40100:40129, origin = "1899-12-30"), 
                random_num = rnorm(30, 8, 5))

这就是我们正在处理的数据框架。

代码语言:javascript
复制
# 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

我正试着筑巢呢?词法范围)两个函数,我称之为child_functionparent_function

代码语言:javascript
复制
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
}

当我用下面的一行进行测试时,我得到了"Error in !variable :无效参数类型“。

代码语言:javascript
复制
parent_function(graph.data, date = cal.date, variable = random_num, hor.line=8)

我想我没有使用正确的dplyr tidyeval语法。我的功能怎么了?

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2018-11-12 16:20:44

需要进行一些清理,但现在它应该有效了:

代码语言:javascript
复制
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放在不需要的地方,反之亦然。

票数 7
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/53265879

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档