如何提取列表中的第一项(即使列表为空)

时间:2018-02-02 07:48:44

标签: r

在R中,我想从嵌套的列表列表中提取第一个项目;但有时列表可能是空的。

e.g:

myList <- list(
            list(ID = 1, Sales = 1000, Product = "Car"),
            list(ID = 2, Sales = 2000, Product = "Boat"),
            list(ID = 3, Sales = 1500, Product = "Bike")
)
myList2 <- list()

所以当我拨打以下电话时:

myList[[1]]
myList2[[1]]

第一个调用会返回一个有效的子列表(ID=1Sales=1000Product = "Car")但第二个调用会返回错误 -

  

Error in myList2[[1]] : subscript out of bounds

是否有一个简单的调用我可以说“填充列表时返回项目1,否则返回NULL并且不会抛出错误”?

4 个答案:

答案 0 :(得分:2)

如果NULL为0,我们可以创建一个返回length的函数,或者返回list的子集

f1 <- function(lst, ind){
   if(length(lst) >=1) lst[[ind]] else NULL
}

f1(myList2, 1)
#NULL

f1(myList, 1)
#$ID
#[1] 1

#$Sales
#[1] 1000

#$Product
#[1] "Car"

答案 1 :(得分:1)

您可以使用tryCatch以便在出现错误时为其提供替代方案,即

f1 <- function(x){
    tryCatch(x, error = function(i)return(NULL))
}

f1(myList[[1]])
#$ID
#[1] 1

#$Sales
#[1] 1000

#$Product
#[1] "Car"

f1(myList2[[1]])
#NULL

答案 2 :(得分:1)

您可以使用first软件包的dplyr功能:

first(myList, default = NULL)
first(myList2, default = NULL)

此处提供有关该功能的更多信息:https://dplyr.tidyverse.org/reference/nth.html

答案 3 :(得分:0)

您可以使用[1]el()[[1]]获得结果。 [1]返回仅包含第一个元素的列表。它在空列表中返回NULL。然后,您必须使用el() ir [[1]]

提取此列表中唯一的元素

参见示例。

myList1 <- list(
  list(ID = 1, Sales = 1000, Product = "Car"),
  list(ID = 2, Sales = 2000, Product = "Boat"),
  list(ID = 3, Sales = 1500, Product = "Bike")
)

myList2 <- list()

el(myList1[1])
el(myList2[1])

myList1[1][[1]]
myList2[1][[1]]

输出:

> el(myList1[1])
$ID
[1] 1

$Sales
[1] 1000

$Product
[1] "Car"

> el(myList2[1])
NULL