Warning: file_get_contents(/data/phpspider/zhask/data//catemap/5/excel/23.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
在R中转换颜色代码_R_Excel_Rgb - Fatal编程技术网

在R中转换颜色代码

在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

我有#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,你打字了吗

如果有颜色代码向量,则沿第二维度应用求和:

> 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来进行缩放(试试看)。然后应用程序将其沿列相加,得到最终答案的和。