# [R] Mean of hexadecimal numbers

Duncan Murdoch murdoch.duncan at gmail.com
Sat Apr 16 20:15:51 CEST 2016

```On 16/04/2016 12:33 PM, Atte Tenkanen wrote:
> Hm...,
>
> Should these two versions produce the same solution?

I wouldn't expect them to.

Duncan Murdoch

Unfortunately and
> shame to confess, I don't know much about the colors in R:
>
> myColors <- c("#FF7C00","#00BF40","#FFFF00")
> Colors=rgb2hsv(col2rgb(myColors))
> apply(Colors,1,mean)
>
>           h         s         v
> 0.2122974 1.0000000 0.9163399
>
> * * * * *
>
> # Average the 1st two by taking the middle colour of a 3 colour palette
> x <- colorRampPalette(c("#FF7C00","#00BF40"), space = "Lab")(3)[2]
>
> # Average in the third by taking the 2nd of a 4 colour palette, so x
> # gets twice the weight
> colorRampPalette(c(x, "#FFFF00"), space = "Lab")(4)[2]
>
> rgb2hsv(col2rgb(colorRampPalette(c(x, "#FFFF00"), space = "Lab")(4)[2]))
>
>          [,1]
> h 0.1597633
> s 0.8407960
> v 0.7882353
>
> Atte T.
>
>
> 16.4.2016, 19.03, Duncan Murdoch kirjoitti:
>> On 16/04/2016 8:47 AM, Atte Tenkanen wrote:
>>> Hi,
>>>
>>> How would you calculate the "mean colour" of several colours, for
>>> example c("#FF7C00","#00BF40","#FFFF00")?
>>>
>>
>> something else:  if those are colours, you don't want to treat each of
>> them as a single integer.
>>
>> A simple-minded approach would split them into 3 hex numbers, and
>> average those (using Bert's solution).
>>
>> A more sophisticated approach would take into account that they are
>> really colours.  You could probably put together something using the
>> colorRamp or colorRampPalette functions to average in perception
>> space.  For example,
>>
>> # Average the 1st two by taking the middle colour of a 3 colour palette
>> x <- colorRampPalette(c("#FF7C00","#00BF40"), space = "Lab")(3)[2]
>>
>> # Average in the third by taking the 2nd of a 4 colour palette, so x
>> # gets twice the weight
>> colorRampPalette(c(x, "#FFFF00"), space = "Lab")(4)[2]
>>
>> Duncan Murdoch
>

```