echarts 的文档里https://echarts.apache.org/zh/option.html#series-gauge.axisLine.lineStyle.color提到如下数组,请问类似 JavaScripts 里面的这种数组在 R 里面应该如何创建?

color: [
    [0.1, 'red'], // 0~10% 红轴
    [0.2, 'green'], // 10~20% 绿轴
    [0.3, 'blue'], // 20~30% 蓝轴
    // ...
]

本楼主手边有一本名为《R 语言核心技术手册》的书,里面提到:

数组是具有两个以上维度的向量。数组可以用来表示多个维度的同类型数据。

下面这种都是数字或者都是字符的数组,我能看明白,但是对于数字和字符混合的数组,俺确实不知道咋整。难道Javascripts 里面的数组和 R 里面的数组不是一个意思吗?

```
a <- array(data = 1:12, dim = c(3, 4, 1))
a
```
, , 1

     [,1] [,2] [,3] [,4]
[1,]    1    4    7   10
[2,]    2    5    8   11
[3,]    3    6    9   12

```
b <- array(data = letters[1:12], dim = c(3, 4, 1))
b
```
, , 1

     [,1] [,2] [,3] [,4]
[1,] "a"  "d"  "g"  "j" 
[2,] "b"  "e"  "h"  "k" 
[3,] "c"  "f"  "i"  "l" 

    list做吧?不同的语言对array的定义会有区别的。我印象中c,c++应该也都是要求array是同类型的数据。

      yuanfan
      在 R 端这是个 matrix 的结构,我们可以用 htmlwidgets:::toJSON() 的功能来验证:

      DF <- data.frame(a = c(0.1, 0.2, 0.3), b = c("red", "green", "blue"))
      htmlwidgets:::toJSON(as.matrix(DF))

      输出结果如下:

      [["0.1","red"],["0.2","green"],["0.3","blue"]] 

        Jiena 矩阵要求所有元素同质,数据框要求列内元素同质,列表则没有任何要求,可以存储任何异质元素。楼主的例子稍微有点特殊,外层数组内每个元素的长度都相同(2),所以是整齐的数据,碰巧可以用数据框表示。当然,数据框只是列表的一个特例。所以用列表一定是可以搞定的,而这个特例里,数据框也可以搞定。

        无敌列表:

        x = list(list(0.1, 'red'), list(0.2, 'green'), list(0.3, 'blue'))
        jsonlite::toJSON(x, auto_unbox = TRUE)

        数据框(需要去掉列名):

        x = data.frame(a = c(0.1, 0.2, 0.3), b = c("red", "green", "blue"))
        jsonlite::toJSON(unname(x))

        因为 0.1 是数值,red 是字符,所以没法塞到同一个矩阵中(数值会被转化为字符)。

        yuanfan Javascripts 里面的数组和 R 里面的数组不是一个意思吗?

        确切地说,JS 的数组对应着 R 的列表,而非 array();R 的 array() 同矩阵一样,要求所有元素同质(矩阵 matrix() 也只是 array() 的一个特例,即:二维)。JS 的 Array() 内可以存放任意类型的元素。

          yihui
          嗯嗯,的确, 一般情况下的 JSON 对应的是 list。如果是内嵌式结构的 JSON 我们可以用 data.tree 构建,再转成 list。我前些年写了个 data.tree 的扩展包 forestry 。例子(和本案无关)如下:

          library(forestry)
          library(jsonlite)
          test_node <- as.Node(test_df)
          new_shape <- forestry::create_tree(test_node$children,"new_tree")
                      levelName
          1  new_tree          
          2   ¦--1             
          3   ¦   °--groupA    
          4   ¦       ¦--Male  
          5   ¦       °--Female
          6   ¦--2             
          7   ¦   °--groupB    
          8   ¦       ¦--Male  
          9   ¦       °--Female
          10  °--3             
          11      °--groupC    
          12          ¦--Male  
          13          °--Female

          然后转化成 JSON

          jsonlite::toJSON(as.list(new_shape), auto_unbox = TRUE)

          输出结果:

          {"name":"new_tree","1":{"groupA":{"Male":{"gender":"Male","group":"groupA","hc":80},"Female":{"gender":"Female","group":"groupA","hc":97}}},"2":{"groupB":{"Male":{"gender":"Male","group":"groupB","hc":44},"Female":{"gender":"Female","group":"groupB","hc":37}}},"3":{"groupC":{"Male":{"gender":"Male","group":"groupC","hc":81},"Female":{"gender":"Female","group":"groupC","hc":46}}}} 
          1 个月 后