r - 从函数调用将变量传递给 ggpubr

标签 r function ggpubr tidyeval nse

我希望将以下公式包装到一个函数中以便于最终使用:

df %>% 
  group_by(a, b) %>%
  summarize(avg=mean(c)) %>%
  ggline(x="a", y="avg", color='b')

但是,即使 is.factor(df$b) == TRUE,以下内容也会返回错误“is.factor(x) 中的错误:对象 'b' 未找到”

graph_var <- function(data_source, var) {
  var2 <- enquo(var)
  
  data_source %>% 
    group_by(a, !!var2 )%>% 
    summarize(avg=mean(c)) %>% 
    ggline(x="a", y="avg", color=shQuote(var) )+ grids(linetype = 'dashed')
}

graph_var(df, b)

我确定问题出在 ggpubr 周围的某个地方,在其参数中使用引号,但我无法准确地找到我需要做什么才能使其正常工作。

为了重现性:

library(tidyverse)
library(ggpubr)

set.seed(13)
df <- data.frame(
  a = rep(1:10),
  b = as.factor(rep(LETTERS[24:26], each = 10)),
  c = rnorm(30)
)

#explicit declatation - this works
df %>% 
  group_by(a, b )%>% 
  summarize(avg=mean(c)) %>% 
  ggline(x="a", y="avg", color="b" )+ grids(linetype = 'dashed') #works

#declaired via variable, this also works
test_var <- "b"

df %>% 
  group_by(a, b )%>% 
  summarize(avg=mean(c)) %>% 
  ggline(x="a", y="avg", color=test_var )+ grids(linetype = 'dashed') #also works

#declaited via f(x) - yeilds error "Error in is.factor(x) : object 'b' not found"
graph_var_ex <- function(data_source, var) {
  var2 <- enquo(var)
  
  data_source %>% 
    group_by(a, !!var2 )%>% 
    summarize(avg=mean(c)) %>% 
    ggline(x="a", y="avg", color=shQuote(var) )+ grids(linetype = 'dashed')
}

graph_var_ex(df, b)

最佳答案

尝试as.character(ensym(var)) .

其他说明:

  1. 您的职能包括y="c"ggline()打电话,但这应该是 y="avg""c"在您的 summarize() 之后不再存在.
  2. 您可以使用 {{ embracing operator作为 !!enquo() 的快捷方式经过时vargroup_by() .
library(dplyr)
library(ggpubr)

# example data
set.seed(13)
df <- data.frame(
  a = rep(1:10),
  b = rep(LETTERS[24:26], each = 10),
  c = rnorm(30)
)

graph_var <- function(data_source, var) {
  var2 <- as.character(ensym(var))
  
  data_source %>% 
    group_by(a, {{var}})%>% 
    summarize(avg = mean(c)) %>% 
    ggline(x = "a", y = "avg", color = var2) + 
    grids(linetype = "dashed")
}

graph_var(df, b)

关于r - 从函数调用将变量传递给 ggpubr,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/74963674/

相关文章:

Vim:从函数调用 ex 命令(set)?

r - 为什么即使添加 add ='mean_se' 后,误差线也不会显示在 ggpubr::ggbarplot 中

R - 用 rgl 绘制由平面描述的区域

r - 将计数标签添加到聚类条形图 ggplot2

r - 有没有办法使用字符串变量向 dplyr 函数提供参数?这个叫什么?

r - 如何强制 'polynom::polynomial' 对象中的尾随零? (特别是从 ggpubr 修改 stat_lm 和 stat_regline_equation 的行为)

r - 使用 R Markdown 文档作为函数源

R/dplyr : Remove all rows in imported csv data frame that have NA entries only

c - C 中的函数和指针