r中的列表数组

时间:2011-04-18 16:54:49

标签: arrays r map

假设我想要10个元素数组,每个元素都是一个列表/映射。我这样做:

x = array(list(), 10)
x[1][[ "a" ]] = 1
Warning message:
In x[1][["a"]] = 1 :
  number of items to replace is not a multiple of replacement length
>

这是正确的做法吗?我希望数组的每个元素都是一个映射。

2 个答案:

答案 0 :(得分:5)

你所谓的“数组”通常只是在R中被称为列表。由于列表的[[[之间的差异,你会被绊倒。请参阅help("[")中的“递归(类似列表)对象”部分。

x[[1]][["a"]] <- 1

更新:
请注意,上面的解决方案创建了一个命名向量列表。换句话说,像是

x[[1]][["a"]] <- 1
x[[1]][["b"]] <- 1:2

将无效,因为您无法将多个值分配给矢量的一个元素。如果您希望能够为名称指定矢量,则可以使用列表列表。

x[[1]] <- as.list(x[[1]])
x[[1]][["b"]] <- 1:2

答案 1 :(得分:5)

如果确实想要这样做,那么,因为数组的每个元素中的列表元素没有名称,所以不能通过字符向量进行索引。在您的示例中,没有x[1][[ "a" ]]

> x[1][[ "a" ]]
NULL

如果没有名称,则需要用数字索引:

> x[1][[ 1 ]] <- 1
[1] 1

拥有列表而不是数组似乎更合乎逻辑:

> y <- vector(mode = "list", length = 10)
> y
[[1]]
NULL

[[2]]
NULL

[[3]]
NULL

[[4]]
NULL

[[5]]
NULL
....