在R中转换颜色代码

我有#0A68A6或#0A428C格式的颜色代码,依此类推。 在R中有一个简单的方法将它们转换成长的Excel颜色代码(对于10905600和9191946以上的例子)?

使用col2rgb并乘以总和:

 > sum(col2rgb("#0A68A6") * c(1,256,256*256)) [1] 10905610 > sum(col2rgb("#0A428C") * c(1,256,256*256)) [1] 9191946 

第一个例子,我得到了10905610而不是10905600,你是否犯了一个错字?

如果您有一个颜色代码vector,请沿第二个维度应用总和:

 > apply(col2rgb(c("#0A428C","#0A68A6")) * c(1,256,256*256), 2, sum) [1] 9191946 10905610 

Spose我应该相信这个链接如何定义长颜色代码号码:

http://www.garybeene.com/code/visual%20basic168.htm

对于教学的澄清,这里是分解成部分的东西:

col2rgb将hex颜色string分解为十进制数字matrix,每行一列,红色,绿色和蓝色行。 这里两种颜色都以#0A开始,十进制是hex,所以第一行是二十。 第一个hex42是4 * 16 + 2 = 66,所以这个颜色有一个绿色的66。 hexA610x16 + 6 = 166,所以第二个颜色的十进制蓝色分量是166:

 > col2rgb(c("#0A428C","#0A68A6")) [,1] [,2] red 10 10 green 66 104 blue 140 166 

向量乘以一个matrix的方式按列方式工作,所以我们将红色乘以1,将绿色乘以256,将蓝色乘以256 * 256,如下所示:

 > col2rgb(c("#0A428C","#0A68A6")) * c(1, 256, 256*256) [,1] [,2] red 10 10 green 16896 26624 blue 9175040 10878976 

现在,hex颜色的excel颜色代码是列的总和:

 > apply(col2rgb(c("#0A428C","#0A68A6")) * c(1, 256, 256*256), 2, sum) [1] 9191946 10905610