在R中转换颜色代码
我有#0A68A6或#0A428C等格式的颜色代码。在R中是否有一种简单的方法将它们转换为长excel颜色代码(对于上面的10905600和9191946示例) 使用在R中转换颜色代码,r,excel,rgb,R,Excel,Rgb,我有#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
col2rgb
进行乘法和求和:
> sum(col2rgb("#0A68A6") * c(1,256,256*256))
[1] 10905610
> sum(col2rgb("#0A428C") * c(1,256,256*256))
[1] 9191946
第一个例子我得到的是10905610而不是10905600,你打字了吗
如果有颜色代码向量,则沿第二维度应用求和:
> apply(col2rgb(c("#0A428C","#0A68A6")) * c(1,256,256*256), 2, sum)
[1] 9191946 10905610
Spose我应该将此链接归功于如何定义长颜色代码编号:
对于说教式的澄清,这里的东西被分解成几个部分:
col2rgb
将十六进制颜色字符串分解为十进制数矩阵,每种颜色一列,包含红色、绿色和蓝色行。在这里,两种颜色都以#0A
开头,它是10的十六进制,因此第1行是两个十。第一行中的十六进制42
是4*16+2=66,因此该颜色的绿色行中有一个66。十六进制A6
为10x16+6
=166,因此十进制中第二种颜色的蓝色分量为166:
> col2rgb(c("#0A428C","#0A68A6"))
[,1] [,2]
red 10 10
green 66 104
blue 140 166
将一个矩阵乘以一个向量按列计算,所以我们将红色乘以1,绿色乘以256,蓝色乘以256*256,如下所示:
> col2rgb(c("#0A428C","#0A68A6")) * c(1, 256, 256*256)
[,1] [,2]
red 10 10
green 16896 26624
blue 9175040 10878976
现在,十六进制颜色的excel颜色代码是以下列的总和:
> apply(col2rgb(c("#0A428C","#0A68A6")) * c(1, 256, 256*256), 2, sum)
[1] 9191946 10905610
我主要想使用R,因为我不知道如何将函数应用到vba中的多个单元格……如果你有一个10 10的矩阵,这是一个很大的问题。如果我使用1:2维,你的最后一行是否也使用矩阵?我不明白
col2rgb
返回一个包含r、g、b行的矩阵,每种颜色在一列中(请尝试)。乘法器通过将每行乘以1、256和65536来进行缩放(试试看)。然后应用程序将其沿列相加,得到最终答案的和。