r - “无效的参数类型”通过函数的参数传递 html 颜色
问题描述
功能是:
violin_rating_by_time <- function(df,var,color,title){
label <- df %>%
filter(!is.na(Decade))%>%
filter(!is.na(!!as.name(var)))%>%
mutate(Decade = fct_reorder(factor(Decade),Release.Date))%>%
group_by(Decade)%>%
summarise(temp=median(!!as.name(var)))
names(label)[names(label)=="temp"] <- var
plot <- df %>%
filter(!is.na(Decade))%>%
mutate(Decade = fct_reorder(factor(Decade),Release.Date))%>%
ggplot(aes(x=Decade,y=!!as.name(var)))+
geom_violin(color=!!as.character(color),fill=!!as.character(color),position="dodge",outlier.colour="transparent",alpha = 0.4,draw_quantiles = c(0.5))+
geom_label(data = label, aes(label = !!as.name(var)),color=!!as.character(color),vjust=-0.4,hjust=0.9)+
theme_aes()+
theme(legend.position = "NA") +
ggtitle(title)
return(plot)
}
我将参数传递给函数(df 只是我使用的数据框,不太重要。)
violin_rt <- violin_rating_by_time(df=df
,var="Metacritic.Score"
,color="#EDDDD4"
,title="Distribution of MC Scores by Decade")
我收到以下错误消息
!as.character(color) 中的错误:无效的参数类型
它来自 geom_violin 函数。当我在没有颜色的情况下绘图时,它工作正常。
谢谢!
编辑:theme_aes() 是我在 ggplot 中用于一些基本主题参数的函数。它不会导致错误。
解决方案
不需要!!
or {{
。首先,color
已经是作为字符串传递的颜色代码。所以你可以简单地将它传递给color
and/orfill
参数geom_violin
。此外,!!
只能在 quasiquotation 上下文中工作,例如在dplyr
管道内:
library(dplyr)
dd <- data.frame(x = 1)
foo <- "foo"
## This works
dd %>%
mutate(y = !!as.character(foo))
#> x y
#> 1 1 foo
## This does not work
dd$z <- !!as.character(foo)
#> Error in !as.character(foo): invalid argument type
其次,当您将列名作为字符串传递时,您可以通过代词访问dplyr
管道内部或内部的列,这也是推荐的方式。请参阅使用 dplyr进行编程和使用 ggplot2 进行编程的最佳实践。aes()
.data
利用@JonSpring 提供的示例数据:
violin_rating_by_time <- function(df, var, color, title) {
label <- df %>%
filter(!is.na(Decade)) %>%
filter(!is.na(.data[[var]])) %>%
mutate(Decade = fct_reorder(factor(Decade), Release.Date)) %>%
group_by(Decade) %>%
summarise(temp = median(.data[[var]]))
names(label)[names(label) == "temp"] <- var
df %>%
filter(!is.na(Decade)) %>%
mutate(Decade = fct_reorder(factor(Decade), Release.Date)) %>%
ggplot(aes(x = Decade, y = .data[[var]])) +
geom_violin(color = color, fill = color, position = "dodge", outlier.colour = "transparent", alpha = 0.4, draw_quantiles = c(0.5)) +
geom_label(data = label, aes(label = .data[[var]]), color = color, vjust = -0.4, hjust = 0.9) +
#theme_aes() +
theme(legend.position = "NA") +
ggtitle(title)
}
library(ggplot2)
library(dplyr)
library(forcats)
set.seed(42)
df <- data.frame(Decade = 2000,
Metacritic.Score = rnorm(10, 10),
Release.Date = 2005)
violin_rating_by_time(
df = df,
var = "Metacritic.Score",
color = "#EDDDD4",
title = "Distribution of MC Scores by Decade"
)
#> Warning: Ignoring unknown parameters: outlier.colour
推荐阅读
- azure - 长时间运行的进程导致 Azure Web App 中出现 502 Bad Gateway 问题
- html - 如何处理设置 z-index?hover 在过渡完成之前取消 z-index
- r - 处理时间序列中的缺失值替换为以前的值
- python - AttributeError:“float”对象没有属性“iloc”
- javascript - 为什么在关闭中绑定的窗口 onload 不总是运行
- sql - sql:加入一些列
- javascript - 将两个画布合并在一起
- python-3.7 - ValueError: int() 以 10 为底的无效文字:'\x00\x00\x00\x00\x00\x00\x00\x00\
- azure - 需要将 Grafana 与 Azure 数据湖集成的解决方案
- node.js - 如何在 Mongoose 中重用 MongoClient?