假设我想要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
>
这是正确的做法吗?我希望数组的每个元素都是一个映射。
答案 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
....