小编Aar*_*ley的帖子

使用dplyr进行功能编程

通过使用dplyr在函数中使用非标准求值,寻找一种更有效/更优雅的方法将多个参数传递给组.我不想使用...运算符,而是单独指定函数.

我的具体用例是一个函数,它接受数据框并创建一个语法更简单的ggplot对象.这是我想用我的函数自动化的代码示例:

# create data frame
my_df <- data.frame(month = sample(1:12, 1000, replace = T),
                    category = sample(head(letters, 3), 1000, replace = T),
                    approved = as.numeric(runif(1000) < 0.5))

my_df$converted <- my_df$approved * as.numeric(runif(1000) < 0.5)

my_df %>%
  group_by(month, category) %>%
  summarize(conversion_rate = sum(converted) / sum(approved)) %>%
  ggplot + geom_line(aes(x = month, y = conversion_rate, group = category, 
  color = category))
Run Code Online (Sandbox Code Playgroud)

我想将group_by,summarize,ggplot和geom_line组合成一个简单的函数,我可以提供x,y和group,并让它执行所有脏工作.这就是我的工作:

# create the function that does the grouping and plotting
plot_lines <- function(df, x, y, group) {

  x <- …
Run Code Online (Sandbox Code Playgroud)

dsl r ggplot2 dplyr rlang

8
推荐指数
2
解决办法
547
查看次数

如何在dbplyr中使用R代码创建自定义SQL函数?

我正在使用dbplyr查询MSSQL数据库,并经常使用将日期四舍五入到每月的第一天mutate(YM = DATEFROMPARTS(YEAR(Date), MONTH(Date), 1))。我希望能够创建一个R函数来为我简化此过程,例如,键入mutate(YM = round_month(Date))并让dbplyr将其转换为上述DATEFROMPARTS函数。

看来我可以使用sql_expr()dbplyr中的函数来做到这一点。通读包的R代码,似乎就是R函数的翻译方式。例如:

year = function(x) sql_expr(DATEPART(YEAR, !!x))
Run Code Online (Sandbox Code Playgroud)

参见:https : //github.com/tidyverse/dbplyr/blob/master/R/backend-mssql.R

所以...我试图自己做同样的事情:

round_month <- function(x) sql_expr(DATEFROMPARTS(YEAR(!!x), MONTH(!!x), 1))

mytbl %>%
  mutate(YM = round_month(Date)) %>%
  show_query()
Run Code Online (Sandbox Code Playgroud)

我希望得到这个:

<SQL>
SELECT DATEFROMPARTS(YEAR("Date"), MONTH("Date"), 1) AS YM
FROM mytbl
Run Code Online (Sandbox Code Playgroud)

但是我得到了这个:

<SQL>
SELECT round_month("Date") AS YM
FROM mytbl
Run Code Online (Sandbox Code Playgroud)

显然什么也没做。我究竟做错了什么?

sql-server r dbplyr

5
推荐指数
1
解决办法
97
查看次数

标签 统计

r ×2

dbplyr ×1

dplyr ×1

dsl ×1

ggplot2 ×1

rlang ×1

sql-server ×1