使用 NULL 初始化列表具有意外的长度

Luk*_*015 4 for-loop r list

dane = list(list(),list(),list())
for(n in 1:3){
  for(m in 1:6){
    dane[[n]][m] =c()
  }
}
lengths(dane)
# [1] 5 5 5
Run Code Online (Sandbox Code Playgroud)

为什么结果的子列表长度为 5,而不是 6?

更简单:

x = list()
for(i in 1:3) x[i] = NULL
length(x)
# [1] 2
## why is this 2, not 3?
Run Code Online (Sandbox Code Playgroud)

jay*_*.sf 6

在循环中,元素实际上被删除,而不是NULL存储在那里。如果尝试删除长度为零的列表中的第 nNULL个元素,则会创建一个包含元素的列表,直到倒数第二个元素。

尝试

x <- list()

length(x)
# [1] 0

x[5] <- NULL

x
# [[1]]
# NULL
# 
# [[2]]
# NULL
# 
# [[3]]
# NULL
# 
# [[4]]
# NULL
Run Code Online (Sandbox Code Playgroud)

在哪里

length(x)
# [1] 4
Run Code Online (Sandbox Code Playgroud)

要使用空列表元素初始化列表,请回想一下,在 R 中列表也是一个向量。

li <- vector(mode='list', length=3L)
li
# [[1]]
# NULL
# 
# [[2]]
# NULL
# 
# [[3]]
# NULL
Run Code Online (Sandbox Code Playgroud)