【发布时间】:2012-10-28 15:32:34
【问题描述】:
简短的问题,如果我有一个字符串,我如何测试该字符串是否是R 中的有效颜色表示?
我尝试了两件事,首先使用函数col2rgb()来测试它是否是一种颜色:
isColor <- function(x)
{
res <- try(col2rgb(x),silent=TRUE)
return(!"try-error"%in%class(res))
}
> isColor("white")
[1] TRUE
> isColor("#000000")
[1] TRUE
> isColor("foo")
[1] FALSE
有效,但看起来不是很漂亮并且没有矢量化。第二件事是检查字符串是否在 colors() 向量或 # 后跟长度为 4 到 6 的十六进制数:
isColor2 <- function(x)
{
return(x%in%colors() | grepl("^#(\\d|[a-f]){6,8}$",x,ignore.case=TRUE))
}
> isColor2("white")
[1] TRUE
> isColor2("#000000")
[1] TRUE
> isColor2("foo")
[1] FALSE
虽然我不确定它的稳定性如何,但它确实有效。但似乎应该有一个内置函数来做这个检查?
【问题讨论】:
-
我想在
Rgames> plot(1,2,col='phlogiston') Error in plot.xy(xy, type, ...) : invalid color name 'phlogiston'上做trycatch没有帮助:-) -
抱歉 - SO 超时让我在编辑过程中遇到了问题。函数的选择取决于你想用它做什么。抛出一个错误是否足够(
plot已经这样做了),还是你想“修复”一个错误的颜色规范?如果是后者,你将不得不滚动你自己的函数,基于你认为正确的校正算法 -
您可能有字母数字。
isColor( "#00000000" )应该返回TRUE -
@Romain yes 应该是 6 到 8 位,改了。 @Carl我喜欢非常灵活的函数参数。例如。
color参数,可以分配颜色以直接使用该颜色,或TRUE使用某种算法来定义颜色,或FALSE省略它。 -
正如加文的回答和评论所表明的那样,您正在走#FFFFFFCC 路径。为了比较,您认为将参数解析为任意函数以确保所述参数名称存在于当前环境中是否明智? (我希望答案是“否”。)此外,如果你有一个变量
my_colors<-c('red','blue','boogersnot')怎么办?调用plot(x,y,col=my_colors)是否出错?
标签: r