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

R 如何提取列表中的第一项(即使列表为空),r,R,在R中,我想从嵌套列表中提取第一项;但是,有时列表可能是空的 e、 g: 第一次调用返回一个有效的子列表(ID=1,Sales=1000,Product=“Car”),但第二次调用返回一个错误- myList2[[1]]中的错误:下标超出范围 有没有一个简单的调用,我可以说“在填充列表时返回项1,否则返回NULL并且不要抛出错误”如果长度为0,我们可以创建一个函数返回NULL,或者返回列表的子集 f1 <- function(lst, ind){ if(length(lst) >

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

e、 g:

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

myList2[[1]]中的
错误:下标超出范围


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

如果
长度
为0,我们可以创建一个函数返回
NULL
,或者返回
列表的子集

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"
f1=1)lst[[ind]]否则为空
}
f1(myList2,1)
#空的
f1(myList,1)
#$ID
#[1] 1
#美元销售额
#[1] 1000
#$Product
#[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

f1您可以使用
[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]]

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

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

有关该函数的更多信息,请单击此处:

是否提取“ID”或仅提取
列表
元素您的
mylist2
是一个空列表。整个
列表
元素。但是我想避免示例2中的错误消息,当列表有0个元素时(在我正在处理的项目中,这些列表来自一个JSON对象,该对象有时返回填充列表,有时返回空列表-我试图确保后者不会导致错误)Yes
mylist2
为空。因此,我想确保当我请求列表中的第一个
[[1]]
项时,我只得到
NULL
returned考虑使用
pairlist()
,它将在空时返回
NULL
pairlist()[[1]]
将返回看起来合理的
NULL
;希望有一个已经可用的函数可以处理这个问题,而不必编写定制的函数!:-)尽管我更喜欢akrun的答案,因为它专门测试所讨论的场景,而不是在错误发生时隐式地捕获它,但这同样有效。
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
first(myList, default = NULL)
first(myList2, default = NULL)