如何检查r中列表元素的存在

hor*_*ora 3 r matrix

如何检查列表元素是否存在。这是一个列表列表,例如我想检查第三个元素 l1[[3]] 是否存在。我试过 is.null(l1[["3"]]) 但是不管它是否存在它都返回false,如果我使用 is.null(l1[[3]]) 它会给出下标的错误绑定,以防它不存在但不为真。我该如何切

Ric*_*rta 6

tl; dr: 如果要检查元素是否n存在,即使在列表末尾或空列表中进行检查,请使用:

length(mylist) >= n   # TRUE indicates exists. FALSE indicates DNE
Run Code Online (Sandbox Code Playgroud)

对于嵌套列表,请确保检查正确的列表。例如:

 length(outerlist[[innerlist]]) >= n
Run Code Online (Sandbox Code Playgroud)




R 中列表中的 NULL 与在其他语言中使用的有一些不同。例如,如果我们将列表的元素替换为 NULL,则所有后续元素都将被移动,并且列表的长度将减少 1。

# SAMPLE DATA
mylist <- as.list(LETTERS[1:5])

    [[1]]
    [1] "A"

    [[2]]
    [1] "B"

    [[3]]
    [1] "C"

    [[4]]
    [1] "D"

    [[5]]
    [1] "E"
Run Code Online (Sandbox Code Playgroud)

在元素 3 和 6 中测试 NULL。不是我们正在寻找的信息。

is.null(mylist[[3]])
# FALSE

is.null(mylist[[6]])
# Error in mylist[[6]] : subscript out of bounds
Run Code Online (Sandbox Code Playgroud)

相反,我们检查列表的长度:

length(mylist) >= 3  # TRUE
length(mylist) >= 5  # TRUE
length(mylist) >= 6  # FALSE
Run Code Online (Sandbox Code Playgroud)

删除第三个元素。请注意,不会保留“空槽” 。(即,元素 4,变成元素 3,等等。)

mylist[[3]] <- NULL

  [[1]]
  [1] "A"

  [[2]]
  [1] "B"

  [[3]]
  [1] "D"

  [[4]]
  [1] "E"


length(mylist) >= 3  # TRUE
length(mylist) >= 5  # FALSE
length(mylist) >= 6  # FALSE
Run Code Online (Sandbox Code Playgroud)

空列表的长度为 0

emptyList <- list()
length(emptyList)  # 0

nestedList <- list( letters=list("A", "B", "C"), empty=list(), words=list("Hello", "World"))

length(nestedList)
  # [1] 3
lapply(nestedList, length)
  # $letters
  # [1] 3
  #
  # $empty
  # [1] 0
  #
  # $words
  # [1] 2
Run Code Online (Sandbox Code Playgroud)



请注意,您可以将NULL 合并到列表中。这是适用于 NULL 测试的情况。例如:

myListWithNull <- list("A", "B", NULL, "D")

is.null(myListWithNull[[3]])
  # TRUE

length(myListWithNull) >= 3
  # TRUE
Run Code Online (Sandbox Code Playgroud)