我希望将以下公式包装到一个函数中以便于最终使用:
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))
.
其他说明:
- 您的职能包括
y="c"
在ggline()
打电话,但这应该是y="avg"
自"c"
在您的summarize()
之后不再存在. - 您可以使用
{{
embracing operator作为!!enquo()
的快捷方式经过时var
至group_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/