将值分配给列表时出错

时间:2014-05-08 03:12:36

标签: r

x <- list()
x[1] <- 1
x[2] <- 1:10

列表可以包含任何类型的数据结构,为什么我会收到警告消息?

In x[2] <- 1:10 :
number of items to replace is not a multiple of replacement length

2 个答案:

答案 0 :(得分:3)

您必须使用双括号来访问列表的元素:

x[[1]] <- 1
x[[2]] <- 1:10

x[2]不是列表x的成员,而是另一个列表

> x[2]
[[1]]
 [1]  1  2  3  4  5  6  7  8  9 10

答案 1 :(得分:0)

发生错误是因为您尝试使用长度为10的向量替换一个NULL列表元素。

> x <- list()
> x[2] <- 1:10  ## error, but x[2] <- list(1:10) works
## interestingly, you did replace the first value
> x[[2]]
## [1] 1

有时可以避免使用双括号,例如,如果您一次填充所有空的list元素,则使用索引向量(例如x[1:2])进行操作。

> x <- vector('list', 2)
> x[1:2] <- list(1, 1:10)
> x
# [[1]]
# [1] 1

# [[2]]
#  [1]  1  2  3  4  5  6  7  8  9 10

第二个元素可以用单括号访问

> x[2]
# [[1]]
#  [1]  1  2  3  4  5  6  7  8  9 10